! function(t, e) {
	"object" == typeof exports && "object" == typeof module ? module.exports = e() : "function" == typeof define &&
		define.amd ? define([], e) : "object" == typeof exports ? exports.BDMap = e() : t.BDMap = e()
}(window, function() {
	return r = {}, o.m = i = [function(t, e, i) {
		"use strict";
		t.exports = r, t.exports["default"] = r;
		var a = i(5);

		function r(t, e) {
			if (!(this instanceof r)) return new r(t, e);
			this._maxEntries = Math.max(4, t || 9), this._minEntries = Math.max(2, Math.ceil(.4 * this
				._maxEntries)), e && this._initFormat(e), this.clear()
		}

		function d(t, e) {
			_(t, 0, t.children.length, e, t)
		}

		function _(t, e, i, r, o) {
			(o = o || g(null)).minX = 1 / 0, o.minY = 1 / 0, o.maxX = -1 / 0, o.maxY = -1 / 0;
			for (var n, s = e; s < i; s++) n = t.children[s], u(o, t.leaf ? r(n) : n);
			return o
		}

		function u(t, e) {
			return t.minX = Math.min(t.minX, e.minX), t.minY = Math.min(t.minY, e.minY), t.maxX = Math.max(t
				.maxX, e.maxX), t.maxY = Math.max(t.maxY, e.maxY), t
		}

		function n(t, e) {
			return t.minX - e.minX
		}

		function s(t, e) {
			return t.minY - e.minY
		}

		function f(t) {
			return (t.maxX - t.minX) * (t.maxY - t.minY)
		}

		function p(t) {
			return t.maxX - t.minX + (t.maxY - t.minY)
		}

		function c(t, e) {
			return t.minX <= e.minX && t.minY <= e.minY && e.maxX <= t.maxX && e.maxY <= t.maxY
		}

		function l(t, e) {
			return e.minX <= t.maxX && e.minY <= t.maxY && e.maxX >= t.minX && e.maxY >= t.minY
		}

		function g(t) {
			return {
				children: t,
				height: 1,
				leaf: !0,
				minX: 1 / 0,
				minY: 1 / 0,
				maxX: -1 / 0,
				maxY: -1 / 0
			}
		}

		function y(t, e, i, r, o) {
			for (var n, s = [e, i]; s.length;)(i = s.pop()) - (e = s.pop()) <= r || (n = e + Math.ceil((i -
				e) / r / 2) * r, a(t, n, e, i, o), s.push(e, n, n, i))
		}
		r.prototype = {
			all: function() {
				return this._all(this.data, [])
			},
			search: function(t) {
				var e = this.data,
					i = [],
					r = this.toBBox;
				if (!l(t, e)) return i;
				for (var o, n, s, a, h = []; e;) {
					for (o = 0, n = e.children.length; o < n; o++) s = e.children[o], l(t, a = e
						.leaf ? r(s) : s) && (e.leaf ? i.push(s) : c(t, a) ? this._all(s, i) : h
						.push(s));
					e = h.pop()
				}
				return i
			},
			collides: function(t) {
				var e = this.data,
					i = this.toBBox;
				if (!l(t, e)) return !1;
				for (var r, o, n, s, a = []; e;) {
					for (r = 0, o = e.children.length; r < o; r++)
						if (n = e.children[r], l(t, s = e.leaf ? i(n) : n)) {
							if (e.leaf || c(t, s)) return !0;
							a.push(n)
						} e = a.pop()
				}
				return !1
			},
			load: function(t) {
				if (!t || !t.length) return this;
				if (t.length < this._minEntries) {
					for (var e = 0, i = t.length; e < i; e++) this.insert(t[e]);
					return this
				}
				var r, o = this._build(t.slice(), 0, t.length - 1, 0);
				return this.data.children.length ? this.data.height === o.height ? this._splitRoot(
						this.data, o) : (this.data.height < o.height && (r = this.data, this.data =
						o, o = r), this._insert(o, this.data.height - o.height - 1, !0)) : this
					.data = o, this
			},
			insert: function(t) {
				return t && this._insert(t, this.data.height - 1), this
			},
			clear: function() {
				return this.data = g([]), this
			},
			remove: function(t, e) {
				if (!t) return this;
				for (var i, r, o, n, s = this.data, a = this.toBBox(t), h = [], l = []; s || h
					.length;) {
					if (s || (s = h.pop(), r = h[h.length - 1], i = l.pop(), n = !0), s.leaf && -
						1 !== (o = function(t, e, i) {
							if (!i) return e.indexOf(t);
							for (var r = 0; r < e.length; r++)
								if (i(t, e[r])) return r;
							return -1
						}(t, s.children, e))) return s.children.splice(o, 1), h.push(s), this
						._condense(h), this;
					n || s.leaf || !c(s, a) ? r ? (i++, s = r.children[i], n = !1) : s = null : (h
						.push(s), l.push(i), i = 0, s = (r = s).children[0])
				}
				return this
			},
			toBBox: function(t) {
				return t
			},
			compareMinX: n,
			compareMinY: s,
			toJSON: function() {
				return this.data
			},
			fromJSON: function(t) {
				return this.data = t, this
			},
			_all: function(t, e) {
				for (var i = []; t;) t.leaf ? e.push.apply(e, t.children) : i.push.apply(i, t
					.children), t = i.pop();
				return e
			},
			_build: function(t, e, i, r) {
				var o, n = i - e + 1,
					s = this._maxEntries;
				if (n <= s) return d(o = g(t.slice(e, i + 1)), this.toBBox), o;
				r || (r = Math.ceil(Math.log(n) / Math.log(s)), s = Math.ceil(n / Math.pow(s, r -
					1))), (o = g([])).leaf = !1, o.height = r;
				var a, h, l, u, p = Math.ceil(n / s),
					c = p * Math.ceil(Math.sqrt(s));
				for (y(t, e, i, c, this.compareMinX), a = e; a <= i; a += c)
					for (y(t, a, l = Math.min(a + c - 1, i), p, this.compareMinY), h = a; h <=
						l; h += p) u = Math.min(h + p - 1, l), o.children.push(this._build(t, h, u,
						r - 1));
				return d(o, this.toBBox), o
			},
			_chooseSubtree: function(t, e, i, r) {
				for (var o, n, s, a, h, l, u, p, c; r.push(e), !e.leaf && r.length - 1 !== i;) {
					for (l = u = 1 / 0, o = 0, n = e.children.length; o < n; o++) h = f(s = e
							.children[o]), p = t, c = s, (p = (Math.max(c.maxX, p.maxX) - Math.min(c
							.minX, p.minX)) * (Math.max(c.maxY, p.maxY) - Math.min(c.minY, p
							.minY)) - h) < u ? (u = p, l = h < l ? h : l, a = s) : p === u && h <
						l && (l = h, a = s);
					e = a || e.children[0]
				}
				return e
			},
			_insert: function(t, e, i) {
				var r = this.toBBox,
					i = i ? t : r(t),
					o = [],
					r = this._chooseSubtree(i, this.data, e, o);
				for (r.children.push(t), u(r, i); 0 <= e && o[e].children.length > this
					._maxEntries;) this._split(o, e), e--;
				this._adjustParentBBoxes(i, o, e)
			},
			_split: function(t, e) {
				var i = t[e],
					r = i.children.length,
					o = this._minEntries;
				this._chooseSplitAxis(i, o, r);
				r = this._chooseSplitIndex(i, o, r), r = g(i.children.splice(r, i.children.length -
					r));
				r.height = i.height, r.leaf = i.leaf, d(i, this.toBBox), d(r, this.toBBox), e ? t[
					e - 1].children.push(r) : this._splitRoot(i, r)
			},
			_splitRoot: function(t, e) {
				this.data = g([t, e]), this.data.height = t.height + 1, this.data.leaf = !1, d(this
					.data, this.toBBox)
			},
			_chooseSplitIndex: function(t, e, i) {
				for (var r, o, n, s, a, h, l, u, p, c = n = 1 / 0, d = e; d <= i - e; d++) a = r =
					_(t, 0, d, this.toBBox), h = o = _(t, d, i, this.toBBox), p = u = l = void 0,
					l = Math.max(a.minX, h.minX), u = Math.max(a.minY, h.minY), p = Math.min(a.maxX,
						h.maxX), h = Math.min(a.maxY, h.maxY), u = Math.max(0, p - l) * Math.max(0,
						h - u), o = f(r) + f(o), u < c ? (c = u, s = d, n = o < n ? o : n) : u ===
					c && o < n && (n = o, s = d);
				return s
			},
			_chooseSplitAxis: function(t, e, i) {
				var r = t.leaf ? this.compareMinX : n,
					o = t.leaf ? this.compareMinY : s;
				this._allDistMargin(t, e, i, r) < this._allDistMargin(t, e, i, o) && t.children
					.sort(r)
			},
			_allDistMargin: function(t, e, i, r) {
				t.children.sort(r);
				for (var o, n = this.toBBox, s = _(t, 0, e, n), a = _(t, i - e, i, n), h = p(s) + p(
						a), l = e; l < i - e; l++) o = t.children[l], u(s, t.leaf ? n(o) : o), h +=
					p(s);
				for (l = i - e - 1; e <= l; l--) o = t.children[l], u(a, t.leaf ? n(o) : o), h += p(
					a);
				return h
			},
			_adjustParentBBoxes: function(t, e, i) {
				for (var r = i; 0 <= r; r--) u(e[r], t)
			},
			_condense: function(t) {
				for (var e, i = t.length - 1; 0 <= i; i--) 0 === t[i].children.length ? 0 < i ? (e =
					t[i - 1].children).splice(e.indexOf(t[i]), 1) : this.clear() : d(t[i], this
					.toBBox)
			},
			_initFormat: function(t) {
				var e = ["return a", " - b", ";"];
				this.compareMinX = new Function("a", "b", e.join(t[0])), this.compareMinY =
					new Function("a", "b", e.join(t[1])), this.toBBox = new Function("a",
						"return {minX: a" + t[0] + ", minY: a" + t[1] + ", maxX: a" + t[2] +
						", maxY: a" + t[3] + "};")
			}
		}
	}, function(t, e, i) {
		"use strict";
		t.exports = o;
		var r = i(6);

		function o(t) {
			this.buf = ArrayBuffer.isView && ArrayBuffer.isView(t) ? t : new Uint8Array(t || 0), this.pos =
				0, this.type = 0, this.length = this.buf.length
		}

		function n(t) {
			return t.type === o.Bytes ? t.readVarint() + t.pos : t.pos + 1
		}

		function s(t, e, i) {
			return i ? 4294967296 * e + (t >>> 0) : 4294967296 * (e >>> 0) + (t >>> 0)
		}

		function a(t, e, i) {
			var r = e <= 16383 ? 1 : e <= 2097151 ? 2 : e <= 268435455 ? 3 : Math.ceil(Math.log(e) / (7 *
				Math.LN2));
			i.realloc(r);
			for (var o = i.pos - 1; t <= o; o--) i.buf[o + r] = i.buf[o]
		}

		function h(t, e) {
			for (var i = 0; i < t.length; i++) e.writeVarint(t[i])
		}

		function l(t, e) {
			for (var i = 0; i < t.length; i++) e.writeSVarint(t[i])
		}

		function u(t, e) {
			for (var i = 0; i < t.length; i++) e.writeFloat(t[i])
		}

		function p(t, e) {
			for (var i = 0; i < t.length; i++) e.writeDouble(t[i])
		}

		function c(t, e) {
			for (var i = 0; i < t.length; i++) e.writeBoolean(t[i])
		}

		function d(t, e) {
			for (var i = 0; i < t.length; i++) e.writeFixed32(t[i])
		}

		function _(t, e) {
			for (var i = 0; i < t.length; i++) e.writeSFixed32(t[i])
		}

		function f(t, e) {
			for (var i = 0; i < t.length; i++) e.writeFixed64(t[i])
		}

		function g(t, e) {
			for (var i = 0; i < t.length; i++) e.writeSFixed64(t[i])
		}

		function y(t, e) {
			return (t[e] | t[e + 1] << 8 | t[e + 2] << 16) + 16777216 * t[e + 3]
		}

		function m(t, e, i) {
			t[i] = e, t[i + 1] = e >>> 8, t[i + 2] = e >>> 16, t[i + 3] = e >>> 24
		}

		function v(t, e) {
			return (t[e] | t[e + 1] << 8 | t[e + 2] << 16) + (t[e + 3] << 24)
		}
		o.Varint = 0, o.Fixed64 = 1, o.Bytes = 2, o.Fixed32 = 5, o.prototype = {
			destroy: function() {
				this.buf = null
			},
			readFields: function(t, e, i) {
				for (i = i || this.length; this.pos < i;) {
					var r = this.readVarint(),
						o = r >> 3,
						n = this.pos;
					this.type = 7 & r, t(o, e, this), this.pos === n && this.skip(r)
				}
				return e
			},
			readMessage: function(t, e) {
				return this.readFields(t, e, this.readVarint() + this.pos)
			},
			readFixed32: function() {
				var t = y(this.buf, this.pos);
				return this.pos += 4, t
			},
			readSFixed32: function() {
				var t = v(this.buf, this.pos);
				return this.pos += 4, t
			},
			readFixed64: function() {
				var t = y(this.buf, this.pos) + 4294967296 * y(this.buf, this.pos + 4);
				return this.pos += 8, t
			},
			readSFixed64: function() {
				var t = y(this.buf, this.pos) + 4294967296 * v(this.buf, this.pos + 4);
				return this.pos += 8, t
			},
			readFloat: function() {
				var t = r.read(this.buf, this.pos, !0, 23, 4);
				return this.pos += 4, t
			},
			readDouble: function() {
				var t = r.read(this.buf, this.pos, !0, 52, 8);
				return this.pos += 8, t
			},
			readVarint: function(t) {
				var e, i = this.buf,
					r = 127 & (e = i[this.pos++]);
				return e < 128 ? r : (r |= (127 & (e = i[this.pos++])) << 7, e < 128 ? r : (r |= (
					127 & (e = i[this.pos++])) << 14, e < 128 ? r : (r |= (127 & (e = i[
					this.pos++])) << 21, e < 128 ? r : function(t, e, i) {
					var r = i.buf,
						o = r[i.pos++],
						n = (112 & o) >> 4;
					if (o < 128) return s(t, n, e);
					if (n |= (127 & (o = r[i.pos++])) << 3, o < 128) return s(t, n,
						e);
					if (n |= (127 & (o = r[i.pos++])) << 10, o < 128) return s(t, n,
						e);
					if (n |= (127 & (o = r[i.pos++])) << 17, o < 128) return s(t, n,
						e);
					if (n |= (127 & (o = r[i.pos++])) << 24, o < 128) return s(t, n,
						e);
					if (n |= (1 & (o = r[i.pos++])) << 31, o < 128) return s(t, n,
						e);
					throw new Error("Expected varint not more than 10 bytes")
				}(r |= (15 & i[this.pos]) << 28, t, this))))
			},
			readVarint64: function() {
				return this.readVarint(!0)
			},
			readSVarint: function() {
				var t = this.readVarint();
				return t % 2 == 1 ? (t + 1) / -2 : t / 2
			},
			readBoolean: function() {
				return Boolean(this.readVarint())
			},
			readString: function() {
				var t = this.readVarint() + this.pos,
					e = function(t, e, i) {
						for (var r = "", o = e; o < i;) {
							var n, s, a, h = t[o],
								l = null,
								u = 239 < h ? 4 : 223 < h ? 3 : 191 < h ? 2 : 1;
							if (i < o + u) break;
							1 === u ? h < 128 && (l = h) : 2 === u ? 128 == (192 & (n = t[o +
								1])) && (l = (31 & h) << 6 | 63 & n) <= 127 && (l = null) : 3 ===
								u ? (n = t[o + 1], s = t[o + 2], 128 == (192 & n) && 128 == (192 &
									s) && ((l = (15 & h) << 12 | (63 & n) << 6 | 63 & s) <=
									2047 || 55296 <= l && l <= 57343) && (l = null)) : 4 === u && (
									n = t[o + 1], s = t[o + 2], a = t[o + 3], 128 == (192 & n) &&
									128 == (192 & s) && 128 == (192 & a) && ((l = (15 & h) << 18 | (
											63 & n) << 12 | (63 & s) << 6 | 63 & a) <= 65535 ||
										1114112 <= l) && (l = null)), null === l ? (l = 65533, u =
									1) : 65535 < l && (l -= 65536, r += String.fromCharCode(l >>>
									10 & 1023 | 55296), l = 56320 | 1023 & l), r += String
								.fromCharCode(l), o += u
						}
						return r
					}(this.buf, this.pos, t);
				return this.pos = t, e
			},
			readBytes: function() {
				var t = this.readVarint() + this.pos,
					e = this.buf.subarray(this.pos, t);
				return this.pos = t, e
			},
			readPackedVarint: function(t, e) {
				var i = n(this);
				for (t = t || []; this.pos < i;) t.push(this.readVarint(e));
				return t
			},
			readPackedSVarint: function(t) {
				var e = n(this);
				for (t = t || []; this.pos < e;) t.push(this.readSVarint());
				return t
			},
			readPackedBoolean: function(t) {
				var e = n(this);
				for (t = t || []; this.pos < e;) t.push(this.readBoolean());
				return t
			},
			readPackedFloat: function(t) {
				var e = n(this);
				for (t = t || []; this.pos < e;) t.push(this.readFloat());
				return t
			},
			readPackedDouble: function(t) {
				var e = n(this);
				for (t = t || []; this.pos < e;) t.push(this.readDouble());
				return t
			},
			readPackedFixed32: function(t) {
				var e = n(this);
				for (t = t || []; this.pos < e;) t.push(this.readFixed32());
				return t
			},
			readPackedSFixed32: function(t) {
				var e = n(this);
				for (t = t || []; this.pos < e;) t.push(this.readSFixed32());
				return t
			},
			readPackedFixed64: function(t) {
				var e = n(this);
				for (t = t || []; this.pos < e;) t.push(this.readFixed64());
				return t
			},
			readPackedSFixed64: function(t) {
				var e = n(this);
				for (t = t || []; this.pos < e;) t.push(this.readSFixed64());
				return t
			},
			skip: function(t) {
				t &= 7;
				if (t === o.Varint)
					for (; 127 < this.buf[this.pos++];);
				else if (t === o.Bytes) this.pos = this.readVarint() + this.pos;
				else if (t === o.Fixed32) this.pos += 4;
				else {
					if (t !== o.Fixed64) throw new Error("Unimplemented type: " + t);
					this.pos += 8
				}
			},
			writeTag: function(t, e) {
				this.writeVarint(t << 3 | e)
			},
			realloc: function(t) {
				for (var e, i = this.length || 16; i < this.pos + t;) i *= 2;
				i !== this.length && ((e = new Uint8Array(i)).set(this.buf), this.buf = e, this
					.length = i)
			},
			finish: function() {
				return this.length = this.pos, this.pos = 0, this.buf.subarray(0, this.length)
			},
			writeFixed32: function(t) {
				this.realloc(4), m(this.buf, t, this.pos), this.pos += 4
			},
			writeSFixed32: function(t) {
				this.realloc(4), m(this.buf, t, this.pos), this.pos += 4
			},
			writeFixed64: function(t) {
				this.realloc(8), m(this.buf, -1 & t, this.pos), m(this.buf, Math.floor(t * (1 /
					4294967296)), this.pos + 4), this.pos += 8
			},
			writeSFixed64: function(t) {
				this.realloc(8), m(this.buf, -1 & t, this.pos), m(this.buf, Math.floor(t * (1 /
					4294967296)), this.pos + 4), this.pos += 8
			},
			writeVarint: function(o) {
				268435455 < (o = +o || 0) || o < 0 ? function(t) {
					var e, i, r;
					if (0 <= o ? (r = o % 4294967296 | 0, e = o / 4294967296 | 0) : (e = ~(-o /
								4294967296), 4294967295 ^ (r = ~(-o % 4294967296)) ? r = r + 1 |
							0 : e = e + 1 | (r = 0)), 0x10000000000000000 <= o || o < -
						0x10000000000000000) throw new Error(
						"Given varint doesn't fit into 10 bytes");
					t.realloc(10), i = r, (r = t).buf[r.pos++] = 127 & i | 128, i >>>= 7, r.buf[
							r.pos++] = 127 & i | 128, i >>>= 7, r.buf[r.pos++] = 127 & i | 128,
						i >>>= 7, r.buf[r.pos++] = 127 & i | 128, i >>>= 7, r.buf[r.pos] = 127 &
						i, e = (7 & (i = e)) << 4, (t = t).buf[t.pos++] |= e | ((i >>>= 3) ?
							128 : 0), i && (t.buf[t.pos++] = 127 & i | ((i >>>= 7) ? 128 : 0),
							i && (t.buf[t.pos++] = 127 & i | ((i >>>= 7) ? 128 : 0), i && (t
								.buf[t.pos++] = 127 & i | ((i >>>= 7) ? 128 : 0), i && (t
									.buf[t.pos++] = 127 & i | ((i >>>= 7) ? 128 : 0), i && (
										t.buf[t.pos++] = 127 & i)))))
				}(this) : (this.realloc(4), this.buf[this.pos++] = 127 & o | (127 < o ? 128 :
					0), o <= 127 || (this.buf[this.pos++] = 127 & (o >>>= 7) | (127 < o ? 128 :
						0), o <= 127 || (this.buf[this.pos++] = 127 & (o >>>= 7) | (127 <
							o ? 128 : 0), o <= 127 || (this.buf[this.pos++] = o >>> 7 &
						127))))
			},
			writeSVarint: function(t) {
				this.writeVarint(t < 0 ? 2 * -t - 1 : 2 * t)
			},
			writeBoolean: function(t) {
				this.writeVarint(Boolean(t))
			},
			writeString: function(t) {
				t = String(t), this.realloc(4 * t.length), this.pos++;
				var e = this.pos;
				this.pos = function(t, e, i) {
					for (var r, o, n = 0; n < e.length; n++) {
						if (55295 < (r = e.charCodeAt(n)) && r < 57344) {
							if (!o) {
								56319 < r || n + 1 === e.length ? (t[i++] = 239, t[i++] = 191,
									t[i++] = 189) : o = r;
								continue
							}
							if (r < 56320) {
								t[i++] = 239, t[i++] = 191, t[i++] = 189, o = r;
								continue
							}
							r = o - 55296 << 10 | r - 56320 | 65536, o = null
						} else o && (t[i++] = 239, t[i++] = 191, t[i++] = 189, o = null);
						r < 128 ? t[i++] = r : (r < 2048 ? t[i++] = r >> 6 | 192 : (r < 65536 ?
								t[i++] = r >> 12 | 224 : (t[i++] = r >> 18 | 240, t[i++] =
									r >> 12 & 63 | 128), t[i++] = r >> 6 & 63 | 128), t[
							i++] = 63 & r | 128)
					}
					return i
				}(this.buf, t, this.pos);
				t = this.pos - e;
				128 <= t && a(e, t, this), this.pos = e - 1, this.writeVarint(t), this.pos += t
			},
			writeFloat: function(t) {
				this.realloc(4), r.write(this.buf, t, this.pos, !0, 23, 4), this.pos += 4
			},
			writeDouble: function(t) {
				this.realloc(8), r.write(this.buf, t, this.pos, !0, 52, 8), this.pos += 8
			},
			writeBytes: function(t) {
				var e = t.length;
				this.writeVarint(e), this.realloc(e);
				for (var i = 0; i < e; i++) this.buf[this.pos++] = t[i]
			},
			writeRawMessage: function(t, e) {
				this.pos++;
				var i = this.pos;
				t(e, this);
				e = this.pos - i;
				128 <= e && a(i, e, this), this.pos = i - 1, this.writeVarint(e), this.pos += e
			},
			writeMessage: function(t, e, i) {
				this.writeTag(t, o.Bytes), this.writeRawMessage(e, i)
			},
			writePackedVarint: function(t, e) {
				this.writeMessage(t, h, e)
			},
			writePackedSVarint: function(t, e) {
				this.writeMessage(t, l, e)
			},
			writePackedBoolean: function(t, e) {
				this.writeMessage(t, c, e)
			},
			writePackedFloat: function(t, e) {
				this.writeMessage(t, u, e)
			},
			writePackedDouble: function(t, e) {
				this.writeMessage(t, p, e)
			},
			writePackedFixed32: function(t, e) {
				this.writeMessage(t, d, e)
			},
			writePackedSFixed32: function(t, e) {
				this.writeMessage(t, _, e)
			},
			writePackedFixed64: function(t, e) {
				this.writeMessage(t, f, e)
			},
			writePackedSFixed64: function(t, e) {
				this.writeMessage(t, g, e)
			},
			writeBytesField: function(t, e) {
				this.writeTag(t, o.Bytes), this.writeBytes(e)
			},
			writeFixed32Field: function(t, e) {
				this.writeTag(t, o.Fixed32), this.writeFixed32(e)
			},
			writeSFixed32Field: function(t, e) {
				this.writeTag(t, o.Fixed32), this.writeSFixed32(e)
			},
			writeFixed64Field: function(t, e) {
				this.writeTag(t, o.Fixed64), this.writeFixed64(e)
			},
			writeSFixed64Field: function(t, e) {
				this.writeTag(t, o.Fixed64), this.writeSFixed64(e)
			},
			writeVarintField: function(t, e) {
				this.writeTag(t, o.Varint), this.writeVarint(e)
			},
			writeSVarintField: function(t, e) {
				this.writeTag(t, o.Varint), this.writeSVarint(e)
			},
			writeStringField: function(t, e) {
				this.writeTag(t, o.Bytes), this.writeString(e)
			},
			writeFloatField: function(t, e) {
				this.writeTag(t, o.Fixed32), this.writeFloat(e)
			},
			writeDoubleField: function(t, e) {
				this.writeTag(t, o.Fixed64), this.writeDouble(e)
			},
			writeBooleanField: function(t, e) {
				this.writeVarintField(t, Boolean(e))
			}
		}
	}, function(t, e, i) {
		i = i(7);
		e.Processor = i
	}, , , function(t, e, i) {
		t.exports = function() {
			"use strict";

			function d(t, e, i) {
				var r = t[e];
				t[e] = t[i], t[i] = r
			}

			function _(t, e) {
				return t < e ? -1 : e < t ? 1 : 0
			}
			return function(t, e, i, r, o) {
				! function _(t, e, i, r, o) {
					for (; i < r;) {
						var n, s, a, h, l;
						600 < r - i && (n = r - i + 1, s = e - i + 1, h = Math.log(n), a = .5 * Math
							.exp(2 * h / 3), l = .5 * Math.sqrt(h * a * (n - a) / n) * (s - n /
								2 < 0 ? -1 : 1), h = Math.max(i, Math.floor(e - s * a / n + l)),
							l = Math.min(r, Math.floor(e + (n - s) * a / n + l)), _(t, e, h, l,
								o));
						var u = t[e],
							p = i,
							c = r;
						for (d(t, i, e), 0 < o(t[r], u) && d(t, i, r); p < c;) {
							for (d(t, p, c), p++, c--; o(t[p], u) < 0;) p++;
							for (; 0 < o(t[c], u);) c--
						}
						0 === o(t[i], u) ? d(t, i, c) : d(t, ++c, r), c <= e && (i = c + 1), e <=
							c && (r = c - 1)
					}
				}(t, e, i || 0, r || t.length - 1, o || _)
			}
		}()
	}, function(t, e) {
		e.read = function(t, e, i, r, o) {
			var n, s, a = 8 * o - r - 1,
				h = (1 << a) - 1,
				l = h >> 1,
				u = -7,
				p = i ? o - 1 : 0,
				c = i ? -1 : 1,
				i = t[e + p];
			for (p += c, n = i & (1 << -u) - 1, i >>= -u, u += a; 0 < u; n = 256 * n + t[e + p], p += c,
				u -= 8);
			for (s = n & (1 << -u) - 1, n >>= -u, u += r; 0 < u; s = 256 * s + t[e + p], p += c, u -= 8)
			;
			if (0 === n) n = 1 - l;
			else {
				if (n === h) return s ? NaN : 1 / 0 * (i ? -1 : 1);
				s += Math.pow(2, r), n -= l
			}
			return (i ? -1 : 1) * s * Math.pow(2, n - r)
		}, e.write = function(t, e, i, r, o, n) {
			var s, a, h = 8 * n - o - 1,
				l = (1 << h) - 1,
				u = l >> 1,
				p = 23 === o ? Math.pow(2, -24) - Math.pow(2, -77) : 0,
				c = r ? 0 : n - 1,
				d = r ? 1 : -1,
				n = e < 0 || 0 === e && 1 / e < 0 ? 1 : 0;
			for (e = Math.abs(e), isNaN(e) || e === 1 / 0 ? (a = isNaN(e) ? 1 : 0, s = l) : (s = Math
					.floor(Math.log(e) / Math.LN2), e * (r = Math.pow(2, -s)) < 1 && (s--, r *= 2), 2 <=
					(e += 1 <= s + u ? p / r : p * Math.pow(2, 1 - u)) * r && (s++, r /= 2), l <= s +
					u ? (a = 0, s = l) : 1 <= s + u ? (a = (e * r - 1) * Math.pow(2, o), s += u) : (a =
						e * Math.pow(2, u - 1) * Math.pow(2, o), s = 0)); 8 <= o; t[i + c] = 255 & a,
				c += d, a /= 256, o -= 8);
			for (s = s << o | a, h += o; 0 < h; t[i + c] = 255 & s, c += d, s /= 256, h -= 8);
			t[i + c - d] |= 128 * n
		}
	}, function(t, e, i) {
		var l = i(8).newImageData;

		function a(x) {
			var E = !0;
			try {
				new ImageData(10, 10)
			} catch (x) {
				E = !1
			}
			return function(t) {
				var e, i, r, o, n = t.buffers,
					s = t.meta,
					a = t.imageOps,
					h = t.width,
					l = t.height,
					u = n.length,
					p = n[0].byteLength;
				if (a) {
					for (var c = new Array(u), d = 0; d < u; ++d) c[d] = (i = new Uint8ClampedArray(n[
						d]), r = h, o = l, E ? new ImageData(i, r, o) : {
						data: i,
						width: r,
						height: o
					});
					e = x(c, s).data
				} else {
					e = new Uint8ClampedArray(p);
					var _ = new Array(u),
						f = new Array(u);
					for (d = 0; d < u; ++d) _[d] = new Uint8ClampedArray(n[d]), f[d] = [0, 0, 0, 0];
					for (var g = 0; g < p; g += 4) {
						for (var y = 0; y < u; ++y) {
							var m = _[y];
							f[y][0] = m[g], f[y][1] = m[g + 1], f[y][2] = m[g + 2], f[y][3] = m[g + 3]
						}
						var v = x(f, s);
						e[g] = v[0], e[g + 1] = v[1], e[g + 2] = v[2], e[g + 3] = v[3]
					}
				}
				return e.buffer
			}
		}

		function r(t) {
			var e;
			this._imageOps = !!t.imageOps;
			var i, r, o, n = [];
			if (e = 0 === t.threads ? 0 : !this._imageOps && t.threads || 1)
				for (var s = 0; s < e; ++s) n[s] = function(e, t) {
					var i = Object.keys(e.lib || {}).map(function(t) {
							return "var " + t + " = " + e.lib[t].toString() + ";"
						}).concat(["var __minion__ = (" + a.toString() + ")(", e.operation.toString(),
							");", 'self.addEventListener("message", function(event) {',
							"  var buffer = __minion__(event.data);",
							"  self.postMessage({buffer: buffer, meta: event.data.meta}, [buffer]);",
							"});"
						]),
						i = new Blob(i, {
							type: "text/javascript"
						}),
						i = URL.createObjectURL(i);
					return (i = new Worker(i)).addEventListener("message", t), i
				}(t, this._onWorkerMessage.bind(this, s));
			else n[0] = (i = t, r = this._onWorkerMessage.bind(this, 0), o = a(i.operation), {
				postMessage: function(t) {
					setTimeout(function() {
						r({
							data: {
								buffer: o(t),
								meta: t.meta
							}
						})
					}, 0)
				}
			});
			this._workers = n, this._queue = [], this._maxQueueLength = t.queue || 1 / 0, this._running = 0,
				this._dataLookup = {}, this._job = null
		}
		r.prototype.process = function(t, e, i) {
			this._enqueue({
				inputs: t,
				meta: e,
				callback: i
			}), this._dispatch()
		}, r.prototype.destroy = function() {
			for (var t in this) this[t] = null;
			this._destroyed = !0
		}, r.prototype._enqueue = function(t) {
			for (this._queue.push(t); this._queue.length > this._maxQueueLength;) this._queue.shift()
				.callback(null, null)
		}, r.prototype._dispatch = function() {
			if (0 === this._running && 0 < this._queue.length) {
				var t = this._job = this._queue.shift(),
					e = t.inputs[0].width,
					i = t.inputs[0].height,
					r = t.inputs.map(function(t) {
						return t.data.buffer
					}),
					o = this._workers.length;
				if (1 === (this._running = o)) this._workers[0].postMessage({
					buffers: r,
					meta: t.meta,
					imageOps: this._imageOps,
					width: e,
					height: i
				}, r);
				else
					for (var n = t.inputs[0].data.length, s = 4 * Math.ceil(n / 4 / o), a = 0; a < o; ++
						a) {
						for (var h = a * s, l = [], u = 0, p = r.length; u < p; ++u) l.push(r[a].slice(
							h, h + s));
						this._workers[a].postMessage({
							buffers: l,
							meta: t.meta,
							imageOps: this._imageOps,
							width: e,
							height: i
						}, l)
					}
			}
		}, r.prototype._onWorkerMessage = function(t, e) {
			this._destroyed || (this._dataLookup[t] = e.data, --this._running, 0 === this._running &&
				this._resolveJob())
		}, r.prototype._resolveJob = function() {
			var t = this._job,
				e = this._workers.length;
			if (1 === e) r = new Uint8ClampedArray(this._dataLookup[0].buffer), o = this._dataLookup[0]
				.meta;
			else
				for (var i = t.inputs[0].data.length, r = new Uint8ClampedArray(i), o = new Array(i),
						n = 4 * Math.ceil(i / 4 / e), s = 0; s < e; ++s) {
					var a = this._dataLookup[s].buffer,
						h = s * n;
					r.set(new Uint8ClampedArray(a), h), o[s] = this._dataLookup[s].meta
				}
			this._job = null, this._dataLookup = {}, t.callback(null, l(r, t.inputs[0].width, t.inputs[
				0].height), o), this._dispatch()
		}, t.exports = r
	}, function(t, e) {
		var r = !0;
		try {
			new ImageData(10, 10)
		} catch (t) {
			r = !1
		}
		var o = document.createElement("canvas").getContext("2d");
		e.newImageData = function(t, e, i) {
			if (r) return new ImageData(t, e, i);
			i = o.createImageData(e, i);
			return i.data.set(t), i
		}
	}, function(d, t, e) {
		"use strict";

		function a() {
			return function() {
				throw new Error("Unimplemented abstract method.")
			}()
		}
		e.r(t);
		var i = 0;

		function ct(t) {
			return t.ol_uid || (t.ol_uid = String(++i))
		}
		var r, o = "5.3.0",
			n = ((r = Error) && (u.__proto__ = r), (u.prototype = Object.create(r && r.prototype))
				.constructor = u),
			s = "add",
			h = "remove",
			l = "propertychange",
			y = "function" == typeof Object.assign ? Object.assign : function(t, e) {
				var i = arguments;
				if (null == t) throw new TypeError("Cannot convert undefined or null to object");
				for (var r = Object(t), o = 1, n = arguments.length; o < n; ++o) {
					var s = i[o];
					if (null != s)
						for (var a in s) s.hasOwnProperty(a) && (r[a] = s[a])
				}
				return r
			};

		function u(t) {
			var e = "Assertion failed. See https://BDMap1.0.org/en/v" + o.split("-")[0] + "/doc/errors/#" +
				t + " for details.";
			r.call(this, e), this.code = t, this.name = "AssertionError", this.message = e
		}

		function _(t) {
			for (var e in t) delete t[e]
		}

		function p(t) {
			var e, i = [];
			for (e in t) i.push(t[e]);
			return i
		}

		function dt(t) {
			for (var e in t) return !1;
			return !e
		}

		function c(t, e, i, r) {
			for (var o, n = 0, s = t.length; n < s; ++n)
				if ((o = t[n]).listener === e && o.bindTo === i) return r && (o.deleteIndex = n), o
		}

		function f(t, e) {
			t = g(t);
			return t ? t[e] : void 0
		}

		function g(t, e) {
			var i = t.ol_lm;
			return !i && e && (i = t.ol_lm = {}), i
		}

		function m(t, e) {
			var i = f(t, e);
			if (i) {
				for (var r = 0, o = i.length; r < o; ++r) t.removeEventListener(e, i[r].boundListener), _(i[
					r]);
				i.length = 0;
				var n = g(t);
				n && (delete n[e], 0 === Object.keys(n).length && delete t.ol_lm)
			}
		}

		function E(t, e, i, r, o) {
			var n, s = g(t, !0),
				a = s[e],
				s = c(a = a || (s[e] = []), i, r, !1);
			return s ? o || (s.callOnce = !1) : (s = {
				bindTo: r,
				callOnce: !!o,
				listener: i,
				target: t,
				type: e
			}, t.addEventListener(e, (e = function(t) {
				var e = n.listener,
					i = n.bindTo || n.target;
				return n.callOnce && S(n), e.call(i, t)
			}, (n = s).boundListener = e)), a.push(s)), s
		}

		function v(t, e, i, r) {
			return E(t, e, i, r, !0)
		}

		function x(t, e, i, r) {
			e = f(t, e);
			!e || (r = c(e, i, r, !0)) && S(r)
		}

		function S(t) {
			var e, i;
			t && t.target && (t.target.removeEventListener(t.type, t.boundListener), (e = f(t.target, t
				.type)) && (-1 !== (i = "deleteIndex" in t ? t.deleteIndex : e.indexOf(t)) && e
				.splice(i, 1), 0 === e.length && m(t.target, t.type)), _(t))
		}

		function C(t) {
			var e = g(t);
			if (e)
				for (var i in e) m(t, i)
		}
		var w = function() {
			this.disposed_ = !1
		};
		w.prototype.dispose = function() {
			this.disposed_ || (this.disposed_ = !0, this.disposeInternal())
		}, w.prototype.disposeInternal = function() {};
		var T = w;

		function R() {
			return !0
		}

		function I() {
			return !1
		}

		function L() {}
		var b = function(t) {
			this.propagationStopped, this.type = t, this.target = null
		};

		function P(t) {
			t.stopPropagation()
		}
		b.prototype.preventDefault = function() {
			this.propagationStopped = !0
		}, b.prototype.stopPropagation = function() {
			this.propagationStopped = !0
		};
		var M, F = b,
			O = ((M = T) && (N.__proto__ = M), ((N.prototype = Object.create(M && M.prototype))
				.constructor = N).prototype.addEventListener = function(t, e) {
				var i = this.listeners_[t]; - 1 === (i = i || (this.listeners_[t] = [])).indexOf(e) && i
					.push(e)
			}, N.prototype.dispatchEvent = function(t) {
				var e, i = "string" == typeof t ? new F(t) : t,
					r = i.type,
					o = (i.target = this).listeners_[r];
				if (o) {
					r in this.dispatching_ || (this.dispatching_[r] = 0, this.pendingRemovals_[r] = 0),
						++this.dispatching_[r];
					for (var n = 0, s = o.length; n < s; ++n)
						if (!1 === o[n].call(this, i) || i.propagationStopped) {
							e = !1;
							break
						} if (--this.dispatching_[r], 0 === this.dispatching_[r]) {
						var a = this.pendingRemovals_[r];
						for (delete this.pendingRemovals_[r]; a--;) this.removeEventListener(r, L);
						delete this.dispatching_[r]
					}
					return e
				}
			}, N.prototype.disposeInternal = function() {
				C(this)
			}, N.prototype.getListeners = function(t) {
				return this.listeners_[t]
			}, N.prototype.hasListener = function(t) {
				return t ? t in this.listeners_ : 0 < Object.keys(this.listeners_).length
			}, N.prototype.removeEventListener = function(t, e) {
				var i = this.listeners_[t];
				i && (e = i.indexOf(e), t in this.pendingRemovals_ ? (i[e] = L, ++this.pendingRemovals_[
					t]) : (i.splice(e, 1), 0 === i.length && delete this.listeners_[t]))
			}, N),
			A = {
				CHANGE: "change",
				CLEAR: "clear",
				CONTEXTMENU: "contextmenu",
				CLICK: "click",
				DBLCLICK: "dblclick",
				DRAGENTER: "dragenter",
				DRAGOVER: "dragover",
				DROP: "drop",
				ERROR: "error",
				KEYDOWN: "keydown",
				KEYPRESS: "keypress",
				LOAD: "load",
				MOUSEDOWN: "mousedown",
				MOUSEMOVE: "mousemove",
				MOUSEOUT: "mouseout",
				MOUSEUP: "mouseup",
				MOUSEWHEEL: "mousewheel",
				MSPOINTERDOWN: "MSPointerDown",
				RESIZE: "resize",
				TOUCHSTART: "touchstart",
				TOUCHMOVE: "touchmove",
				TOUCHEND: "touchend",
				WHEEL: "wheel"
			};

		function N() {
			M.call(this), this.pendingRemovals_ = {}, this.dispatching_ = {}, this.listeners_ = {}
		}
		var G, D, k = ((D = O) && (B.__proto__ = D), ((B.prototype = Object.create(D && D.prototype))
				.constructor = B).prototype.changed = function() {
				++this.revision_, this.dispatchEvent(A.CHANGE)
			}, B.prototype.getRevision = function() {
				return this.revision_
			}, B.prototype.on = function(t, e) {
				if (Array.isArray(t)) {
					for (var i = t.length, r = new Array(i), o = 0; o < i; ++o) r[o] = E(this, t[o], e);
					return r
				}
				return E(this, t, e)
			}, B.prototype.once = function(t, e) {
				if (Array.isArray(t)) {
					for (var i = t.length, r = new Array(i), o = 0; o < i; ++o) r[o] = v(this, t[o], e);
					return r
				}
				return v(this, t, e)
			}, B.prototype.un = function(t, e) {
				if (Array.isArray(t))
					for (var i = 0, r = t.length; i < r; ++i) x(this, t[i], e);
				else x(this, t, e)
			}, B),
			j = ((G = F) && (Y.__proto__ = G), (Y.prototype = Object.create(G && G.prototype)).constructor =
				Y),
			U = {};

		function Y(t, e, i) {
			G.call(this, t), this.key = e, this.oldValue = i
		}

		function B() {
			D.call(this), this.revision_ = 0
		}

		function z(t) {
			return U.hasOwnProperty(t) ? U[t] : U[t] = "change:" + t
		}
		var X, V, W, K = ((W = k) && (Q.__proto__ = W), ((Q.prototype = Object.create(W && W.prototype))
				.constructor = Q).prototype.get = function(t) {
				var e;
				return this.values_.hasOwnProperty(t) && (e = this.values_[t]), e
			}, Q.prototype.getKeys = function() {
				return Object.keys(this.values_)
			}, Q.prototype.getProperties = function() {
				return y({}, this.values_)
			}, Q.prototype.notify = function(t, e) {
				var i = z(t);
				this.dispatchEvent(new j(i, t, e)), i = l, this.dispatchEvent(new j(i, t, e))
			}, Q.prototype.set = function(t, e, i) {
				i ? this.values_[t] = e : (i = this.values_[t]) !== (this.values_[t] = e) && this
					.notify(t, i)
			}, Q.prototype.setProperties = function(t, e) {
				for (var i in t) this.set(i, t[i], e)
			}, Q.prototype.unset = function(t, e) {
				var i;
				t in this.values_ && (i = this.values_[t], delete this.values_[t], e || this.notify(t,
					i))
			}, Q),
			H = ((V = F) && (J.__proto__ = V), (J.prototype = Object.create(V && V.prototype)).constructor =
				J),
			Z = ((X = K) && (q.__proto__ = X), ((q.prototype = Object.create(X && X.prototype))
				.constructor = q).prototype.clear = function() {
				for (; 0 < this.getLength();) this.pop()
			}, q.prototype.extend = function(t) {
				for (var e = 0, i = t.length; e < i; ++e) this.push(t[e]);
				return this
			}, q.prototype.forEach = function(t) {
				for (var e = this.array_, i = 0, r = e.length; i < r; ++i) t(e[i], i, e)
			}, q.prototype.getArray = function() {
				return this.array_
			}, q.prototype.item = function(t) {
				return this.array_[t]
			}, q.prototype.getLength = function() {
				return this.get("length")
			}, q.prototype.insertAt = function(t, e) {
				this.unique_ && this.assertUnique_(e), this.array_.splice(t, 0, e), this
				.updateLength_(), this.dispatchEvent(new H(s, e))
			}, q.prototype.pop = function() {
				return this.removeAt(this.getLength() - 1)
			}, q.prototype.push = function(t) {
				this.unique_ && this.assertUnique_(t);
				var e = this.getLength();
				return this.insertAt(e, t), this.getLength()
			}, q.prototype.remove = function(t) {
				for (var e = this.array_, i = 0, r = e.length; i < r; ++i)
					if (e[i] === t) return this.removeAt(i)
			}, q.prototype.removeAt = function(t) {
				var e = this.array_[t];
				return this.array_.splice(t, 1), this.updateLength_(), this.dispatchEvent(new H(h, e)),
					e
			}, q.prototype.setAt = function(t, e) {
				var i = this.getLength();
				if (t < i) {
					this.unique_ && this.assertUnique_(e, t);
					var r = this.array_[t];
					this.array_[t] = e, this.dispatchEvent(new H(h, r)), this.dispatchEvent(new H(s, e))
				} else {
					for (var o = i; o < t; ++o) this.insertAt(o, void 0);
					this.insertAt(t, e)
				}
			}, q.prototype.updateLength_ = function() {
				this.set("length", this.array_.length)
			}, q.prototype.assertUnique_ = function(t, e) {
				for (var i = 0, r = this.array_.length; i < r; ++i)
					if (this.array_[i] === t && i !== e) throw new n(58)
			}, q);

		function q(t, e) {
			X.call(this);
			e = e || {};
			if (this.unique_ = !!e.unique, this.array_ = t || [], this.unique_)
				for (var i = 0, r = this.array_.length; i < r; ++i) this.assertUnique_(this.array_[i], i);
			this.updateLength_()
		}

		function J(t, e) {
			V.call(this, t), this.element = e
		}

		function Q(t) {
			W.call(this), ct(this), this.values_ = {}, void 0 !== t && this.setProperties(t)
		}

		function $(t, e) {
			if (!t) throw new n(e)
		}
		var tt, et = ((tt = K) && (it.__proto__ = tt), ((it.prototype = Object.create(tt && tt.prototype))
			.constructor = it).prototype.clone = function() {
			var t = new it(this.getProperties());
			t.setGeometryName(this.getGeometryName());
			var e = this.getGeometry();
			e && t.setGeometry(e.clone());
			e = this.getStyle();
			return e && t.setStyle(e), t
		}, it.prototype.getGeometry = function() {
			return this.get(this.geometryName_)
		}, it.prototype.getId = function() {
			return this.id_
		}, it.prototype.getGeometryName = function() {
			return this.geometryName_
		}, it.prototype.getStyle = function() {
			return this.style_
		}, it.prototype.getStyleFunction = function() {
			return this.styleFunction_
		}, it.prototype.handleGeometryChange_ = function() {
			this.changed()
		}, it.prototype.handleGeometryChanged_ = function() {
			this.geometryChangeKey_ && (S(this.geometryChangeKey_), this.geometryChangeKey_ = null);
			var t = this.getGeometry();
			t && (this.geometryChangeKey_ = E(t, A.CHANGE, this.handleGeometryChange_, this)), this
				.changed()
		}, it.prototype.setGeometry = function(t) {
			this.set(this.geometryName_, t)
		}, it.prototype.setStyle = function(t) {
			var e;
			this.style_ = t, this.styleFunction_ = t ? "function" == typeof(t = t) ? t : (e = Array
				.isArray(t) ? t : ($("function" == typeof t.getZIndex, 41), [t]),
				function() {
					return e
				}) : void 0, this.changed()
		}, it.prototype.setId = function(t) {
			this.id_ = t, this.changed()
		}, it.prototype.setGeometryName = function(t) {
			x(this, z(this.geometryName_), this.handleGeometryChanged_, this), this.geometryName_ =
				t, E(this, z(this.geometryName_), this.handleGeometryChanged_, this), this
				.handleGeometryChanged_()
		}, it);

		function it(t) {
			tt.call(this), this.id_ = void 0, this.geometryName_ = "geometry", this.style_ = null, this
				.styleFunction_ = void 0, this.geometryChangeKey_ = null, E(this, z(this.geometryName_),
					this.handleGeometryChanged_, this), t && ("function" == typeof t.getSimplifiedGeometry ?
					this.setGeometry(t) : this.setProperties(t))
		}

		function rt(t, e) {
			return e < t ? 1 : t < e ? -1 : 0
		}

		function ot(t, e) {
			return 0 <= t.indexOf(e)
		}

		function nt(t, e, i) {
			var r, o = t.length;
			if (t[0] <= e) return 0;
			if (e <= t[o - 1]) return o - 1;
			if (0 < i) {
				for (r = 1; r < o; ++r)
					if (t[r] < e) return r - 1
			} else if (i < 0) {
				for (r = 1; r < o; ++r)
					if (t[r] <= e) return r
			} else
				for (r = 1; r < o; ++r) {
					if (t[r] == e) return r;
					if (t[r] < e) return t[r - 1] - e < e - t[r] ? r - 1 : r
				}
			return o - 1
		}

		function st(t, e) {
			for (var i = Array.isArray(e) ? e : [e], r = i.length, o = 0; o < r; o++) t[t.length] = i[o]
		}

		function at(t, e) {
			for (var i, r = t.length >>> 0, o = 0; o < r; o++)
				if (e(i = t[o], o, t)) return i;
			return null
		}

		function _t(t, e) {
			var i = t.length;
			if (i === e.length) {
				for (var r = 0; r < i; r++)
					if (t[r] !== e[r]) return;
				return 1
			}
		}

		function ht(t, i) {
			for (var e = t.length, r = Array(t.length), o = 0; o < e; o++) r[o] = {
				index: o,
				value: t[o]
			};
			for (r.sort(function(t, e) {
					return i(t.value, e.value) || t.index - e.index
				}), o = 0; o < t.length; o++) t[o] = r[o].value
		}

		function lt(i, r) {
			var o;
			return i.every(function(t, e) {
				return !r(t, o = e, i)
			}) ? -1 : o
		}
		var ut = {
				BOTTOM_LEFT: "bottom-left",
				BOTTOM_RIGHT: "bottom-right",
				TOP_LEFT: "top-left",
				TOP_RIGHT: "top-right"
			},
			pt = {
				UNKNOWN: 0,
				INTERSECTING: 1,
				ABOVE: 2,
				RIGHT: 4,
				BELOW: 8,
				LEFT: 16
			};

		function ft(t) {
			for (var e = Ct(), i = 0, r = t.length; i < r; ++i) Pt(e, t[i]);
			return e
		}

		function gt(t, e, i) {
			return i ? (i[0] = t[0] - e, i[1] = t[1] - e, i[2] = t[2] + e, i[3] = t[3] + e, i) : [t[0] - e,
				t[1] - e, t[2] + e, t[3] + e
			]
		}

		function yt(t, e) {
			return e ? (e[0] = t[0], e[1] = t[1], e[2] = t[2], e[3] = t[3], e) : t.slice()
		}

		function mt(t, e, i) {
			return (e = e < t[0] ? t[0] - e : t[2] < e ? e - t[2] : 0) * e + (t = i < t[1] ? t[1] - i : t[
				3] < i ? i - t[3] : 0) * t
		}

		function vt(t, e) {
			return Et(t, e[0], e[1])
		}

		function xt(t, e) {
			return t[0] <= e[0] && e[2] <= t[2] && t[1] <= e[1] && e[3] <= t[3]
		}

		function Et(t, e, i) {
			return t[0] <= e && e <= t[2] && t[1] <= i && i <= t[3]
		}

		function St(t, e) {
			var i = t[0],
				r = t[1],
				o = t[2],
				n = t[3],
				s = e[0],
				t = e[1],
				e = pt.UNKNOWN;
			return s < i ? e |= pt.LEFT : o < s && (e |= pt.RIGHT), t < r ? e |= pt.BELOW : n < t && (e |=
				pt.ABOVE), e === pt.UNKNOWN && (e = pt.INTERSECTING), e
		}

		function Ct() {
			return [1 / 0, 1 / 0, -1 / 0, -1 / 0]
		}

		function wt(t, e, i, r, o) {
			return o ? (o[0] = t, o[1] = e, o[2] = i, o[3] = r, o) : [t, e, i, r]
		}

		function Tt(t) {
			return wt(1 / 0, 1 / 0, -1 / 0, -1 / 0, t)
		}

		function Rt(t, e) {
			var i = t[0],
				t = t[1];
			return wt(i, t, i, t, e)
		}

		function It(t, e, i, r, o) {
			return Mt(Tt(o), t, e, i, r)
		}

		function Lt(t, e) {
			return t[0] == e[0] && t[2] == e[2] && t[1] == e[1] && t[3] == e[3]
		}

		function bt(t, e) {
			return e[0] < t[0] && (t[0] = e[0]), e[2] > t[2] && (t[2] = e[2]), e[1] < t[1] && (t[1] = e[1]),
				e[3] > t[3] && (t[3] = e[3]), t
		}

		function Pt(t, e) {
			e[0] < t[0] && (t[0] = e[0]), e[0] > t[2] && (t[2] = e[0]), e[1] < t[1] && (t[1] = e[1]), e[1] >
				t[3] && (t[3] = e[1])
		}

		function Mt(t, e, i, r, o) {
			for (; i < r; i += o) n = t, s = e[i], a = e[i + 1], n[0] = Math.min(n[0], s), n[1] = Math.min(
				n[1], a), n[2] = Math.max(n[2], s), n[3] = Math.max(n[3], a);
			var n, s, a;
			return t
		}

		function Ft(t, e, i) {
			var r;
			return (r = e.call(i, At(t))) || (r = e.call(i, Nt(t))) || (r = e.call(i, Yt(t))) ? r : (r = e
				.call(i, Ut(t))) || !1
		}

		function Ot(t) {
			var e = 0;
			return Xt(t) || (e = Bt(t) * kt(t)), e
		}

		function At(t) {
			return [t[0], t[1]]
		}

		function Nt(t) {
			return [t[2], t[1]]
		}

		function Gt(t) {
			return [(t[0] + t[2]) / 2, (t[1] + t[3]) / 2]
		}

		function Dt(t, e, i, r, o) {
			var n = e * r[0] / 2,
				s = e * r[1] / 2,
				a = Math.cos(i),
				h = Math.sin(i),
				l = n * a,
				u = n * h,
				e = s * a,
				r = s * h,
				i = t[0],
				n = t[1],
				a = i - l + r,
				s = i - l - r,
				h = i + l - r,
				t = i + l + r,
				i = n - u - e,
				l = n - u + e,
				r = n + u + e,
				e = n + u - e;
			return wt(Math.min(a, s, h, t), Math.min(i, l, r, e), Math.max(a, s, h, t), Math.max(i, l, r,
				e), o)
		}

		function kt(t) {
			return t[3] - t[1]
		}

		function jt(t, e, i) {
			i = i || [1 / 0, 1 / 0, -1 / 0, -1 / 0];
			return zt(t, e) ? (t[0] > e[0] ? i[0] = t[0] : i[0] = e[0], t[1] > e[1] ? i[1] = t[1] : i[1] =
					e[1], t[2] < e[2] ? i[2] = t[2] : i[2] = e[2], t[3] < e[3] ? i[3] = t[3] : i[3] = e[3]
					) : Tt(i), i
		}

		function Ut(t) {
			return [t[0], t[3]]
		}

		function Yt(t) {
			return [t[2], t[3]]
		}

		function Bt(t) {
			return t[2] - t[0]
		}

		function zt(t, e) {
			return t[0] <= e[2] && t[2] >= e[0] && t[1] <= e[3] && t[3] >= e[1]
		}

		function Xt(t) {
			return t[2] < t[0] || t[3] < t[1]
		}

		function Vt(t, e) {
			var i = (t[2] - t[0]) / 2 * (e - 1),
				e = (t[3] - t[1]) / 2 * (e - 1);
			t[0] -= i, t[2] += i, t[1] -= e, t[3] += e
		}

		function Wt(t, e, i) {
			t = [t[0], t[1], t[0], t[3], t[2], t[1], t[2], t[3]];
			return e(t, t, 2), e = [t[0], t[2], t[4], t[6]], t = [t[1], t[3], t[5], t[7]], i = i, wt(Math
				.min.apply(null, e), Math.min.apply(null, t), Math.max.apply(null, e), Math.max.apply(
					null, t), i)
		}
		var Kt = {
				XY: "XY",
				XYZ: "XYZ",
				XYM: "XYM",
				XYZM: "XYZM"
			},
			Ht = {
				POINT: "Point",
				LINE_STRING: "LineString",
				LINEAR_RING: "LinearRing",
				POLYGON: "Polygon",
				MULTI_POINT: "MultiPoint",
				MULTI_LINE_STRING: "MultiLineString",
				MULTI_POLYGON: "MultiPolygon",
				GEOMETRY_COLLECTION: "GeometryCollection",
				CIRCLE: "Circle"
			};

		function Zt(t, e, i, r, o, n) {
			for (var s = n || [], a = 0, h = e; h < i; h += r) {
				var l = t[h],
					u = t[h + 1];
				s[a++] = o[0] * l + o[2] * u + o[4], s[a++] = o[1] * l + o[3] * u + o[5]
			}
			return n && s.length != a && (s.length = a), s
		}

		function qt(t, e, i, r, o, n, s) {
			for (var a = s || [], h = 0, l = e; l < i; l += r) {
				a[h++] = t[l] + o, a[h++] = t[l + 1] + n;
				for (var u = l + 2; u < l + r; ++u) a[h++] = t[u]
			}
			return s && a.length != h && (a.length = h), a
		}

		function Jt(t, e, i) {
			return Math.min(Math.max(t, e), i)
		}
		var Qt = "cosh" in Math ? Math.cosh : function(t) {
			t = Math.exp(t);
			return (t + 1 / t) / 2
		};

		function $t(t, e, i, r, o, n) {
			var s, a = o - i,
				h = n - r;
			return 0 == a && 0 == h || (1 < (s = ((t - i) * a + (e - r) * h) / (a * a + h * h)) ? (i = o,
				r = n) : 0 < s && (i += a * s, r += h * s)), te(t, e, i, r)
		}

		function te(t, e, i, r) {
			t = i - t, e = r - e;
			return t * t + e * e
		}

		function ee(t) {
			return 180 * t / Math.PI
		}

		function ie(t) {
			return t * Math.PI / 180
		}

		function re(t, e) {
			t %= e;
			return t * e < 0 ? t + e : t
		}

		function oe(t, e, i) {
			return t + i * (e - t)
		}
		var ne = 6371008.8;

		function se(t, e, i) {
			var r = i || ne,
				o = ie(t[1]),
				n = ie(e[1]),
				i = (n - o) / 2,
				t = ie(e[0] - t[0]) / 2,
				n = Math.sin(i) * Math.sin(i) + Math.sin(t) * Math.sin(t) * Math.cos(o) * Math.cos(n);
			return 2 * r * Math.atan2(Math.sqrt(n), Math.sqrt(1 - n))
		}

		function ae(t, e) {
			for (var i = 0, r = 0, o = t.length; r < o - 1; ++r) i += se(t[r], t[r + 1], e);
			return i
		}

		function he(t, e) {
			for (var i = 0, r = t.length, o = t[r - 1][0], n = t[r - 1][1], s = 0; s < r; s++) {
				var a = t[s][0],
					h = t[s][1];
				i += ie(a - o) * (2 + Math.sin(ie(n)) + Math.sin(ie(h))), o = a, n = h
			}
			return i * e * e / 2
		}
		var le = {
				DEGREES: "degrees",
				FEET: "ft",
				METERS: "m",
				PIXELS: "pixels",
				TILE_PIXELS: "tile-pixels",
				USFEET: "us-ft"
			},
			ue = {};
		ue[le.DEGREES] = 2 * Math.PI * 6370997 / 360, ue[le.FEET] = .3048, ue[le.METERS] = 1, ue[le
			.USFEET] = 1200 / 3937;
		var pe = le,
			ce = function(t) {
				this.code_ = t.code, this.units_ = t.units, this.extent_ = void 0 !== t.extent ? t.extent :
					null, this.worldExtent_ = void 0 !== t.worldExtent ? t.worldExtent : null, this
					.axisOrientation_ = void 0 !== t.axisOrientation ? t.axisOrientation : "enu", this
					.global_ = void 0 !== t.global && t.global, this.canWrapX_ = !(!this.global_ || !this
						.extent_), this.getPointResolutionFunc_ = t.getPointResolution, this
					.defaultTileGrid_ = null, this.metersPerUnit_ = t.metersPerUnit
			};
		ce.prototype.canWrapX = function() {
			return this.canWrapX_
		}, ce.prototype.getCode = function() {
			return this.code_
		}, ce.prototype.getExtent = function() {
			return this.extent_
		}, ce.prototype.getUnits = function() {
			return this.units_
		}, ce.prototype.getMetersPerUnit = function() {
			return this.metersPerUnit_ || ue[this.units_]
		}, ce.prototype.getWorldExtent = function() {
			return this.worldExtent_
		}, ce.prototype.getAxisOrientation = function() {
			return this.axisOrientation_
		}, ce.prototype.isGlobal = function() {
			return this.global_
		}, ce.prototype.setGlobal = function(t) {
			this.global_ = t, this.canWrapX_ = !(!t || !this.extent_)
		}, ce.prototype.getDefaultTileGrid = function() {
			return this.defaultTileGrid_
		}, ce.prototype.setDefaultTileGrid = function(t) {
			this.defaultTileGrid_ = t
		}, ce.prototype.setExtent = function(t) {
			this.extent_ = t, this.canWrapX_ = !(!this.global_ || !t)
		}, ce.prototype.setWorldExtent = function(t) {
			this.worldExtent_ = t
		}, ce.prototype.setGetPointResolution = function(t) {
			this.getPointResolutionFunc_ = t
		}, ce.prototype.getPointResolutionFunc = function() {
			return this.getPointResolutionFunc_
		};
		var de, _e = ce,
			fe = 6378137,
			ge = Math.PI * fe,
			ye = [-ge, -ge, ge, ge],
			me = [-180, -85, 180, 85],
			ve = ((de = _e) && (Ee.__proto__ = de), (Ee.prototype = Object.create(de && de.prototype))
				.constructor = Ee),
			xe = [new ve("EPSG:3857"), new ve("EPSG:102100"), new ve("EPSG:102113"), new ve("EPSG:900913"),
				new ve("urn:ogc:def:crs:EPSG:6.18:3:3857"), new ve("urn:ogc:def:crs:EPSG::3857"), new ve(
					"http://www.opengis.net/gml/srs/epsg.xml#3857")
			];

		function Ee(t) {
			de.call(this, {
				code: t,
				units: pe.METERS,
				extent: ye,
				global: !0,
				worldExtent: me,
				getPointResolution: function(t, e) {
					return t / Qt(e[1] / fe)
				}
			})
		}
		var Se, Ce = [-180, -90, 180, 90],
			we = 6378137 * Math.PI / 180,
			Te = ((Se = _e) && (Le.__proto__ = Se), (Le.prototype = Object.create(Se && Se.prototype))
				.constructor = Le),
			Re = [new Te("CRS:84"), new Te("EPSG:4326", "neu"), new Te("urn:ogc:def:crs:EPSG::4326", "neu"),
				new Te("urn:ogc:def:crs:EPSG:6.6:4326", "neu"), new Te("urn:ogc:def:crs:OGC:1.3:CRS84"),
				new Te("urn:ogc:def:crs:OGC:2:84"), new Te("http://www.opengis.net/gml/srs/epsg.xml#4326",
					"neu"), new Te("urn:x-ogc:def:crs:EPSG:4326", "neu")
			],
			Ie = {};

		function Le(t, e) {
			Se.call(this, {
				code: t,
				units: pe.DEGREES,
				extent: Ce,
				axisOrientation: e,
				global: !0,
				metersPerUnit: we,
				worldExtent: Ce
			})
		}
		var be, Pe, Me, Fe = {};

		function Oe(t, e, i) {
			t = t.getCode(), e = e.getCode();
			t in Fe || (Fe[t] = {}), Fe[t][e] = i
		}

		function Ae(t, e) {
			var i;
			return t in Fe && e in Fe[t] && (i = Fe[t][e]), i
		}

		function Ne(t, e, i) {
			var r;
			if (void 0 !== e) {
				for (var o = 0, n = t.length; o < n; ++o) e[o] = t[o];
				r = e
			} else r = t.slice();
			return r
		}

		function Ge(t, e, i) {
			if (void 0 !== e && t !== e) {
				for (var r = 0, o = t.length; r < o; ++r) e[r] = t[r];
				t = e
			}
			return t
		}

		function De(t) {
			var e;
			e = t.getCode(), Oe(Ie[e] = t, t, Ne)
		}

		function ke(t) {
			return "string" == typeof t ? Ie[t] || null : t || null
		}

		function je(t, e, i, r) {
			var o, n = (t = ke(t)).getPointResolutionFunc();
			return n ? o = n(e, i) : t.getUnits() == pe.DEGREES && !r || r == pe.DEGREES ? o = e : (o = (se(
					(e = Ve(t, ke("EPSG:4326"))(e = [i[0] - e / 2, i[1], i[0] + e / 2, i[1], i[0],
						i[1] - e / 2, i[0], i[1] + e / 2
					], e, 2)).slice(0, 2), e.slice(2, 4)) + se(e.slice(4, 6), e.slice(6, 8))) / 2,
				void 0 !== (t = r ? ue[r] : t.getMetersPerUnit()) && (o /= t)), o
		}

		function Ue(t) {
			t.forEach(De), t.forEach(function(e) {
				t.forEach(function(t) {
					e !== t && Oe(e, t, Ne)
				})
			})
		}

		function Ye(t, e) {
			return t ? "string" == typeof t ? ke(t) : t : ke(e)
		}

		function Be(l) {
			return function(t, e, i) {
				for (var r = t.length, o = void 0 !== i ? i : 2, n = void 0 !== e ? e : new Array(r),
						s = 0; s < r; s += o) {
					var a = l([t[s], t[s + 1]]);
					n[s] = a[0], n[s + 1] = a[1];
					for (var h = o - 1; 2 <= h; --h) n[s + h] = t[s + h]
				}
				return n
			}
		}

		function ze(t, e, i, r) {
			t = ke(t), e = ke(e);
			Oe(t, e, Be(i)), Oe(e, t, Be(r))
		}

		function Xe(t, e) {
			if (t === e) return !0;
			var i = t.getUnits() === e.getUnits();
			return (t.getCode() === e.getCode() || Ve(t, e) === Ne) && i
		}

		function Ve(t, e) {
			return Ae(t.getCode(), e.getCode()) || Ge
		}

		function We(t, e) {
			return Ve(ke(t), ke(e))
		}

		function Ke(t, e, i) {
			return We(e, i)(t, void 0, t.length)
		}

		function He(t, e, i) {
			return Wt(t, We(e, i))
		}
		Ue(xe), Ue(Re), be = xe, Pe = function(t, e, i) {
			var r = t.length,
				o = 1 < i ? i : 2,
				n = e;
			void 0 === n && (n = 2 < o ? t.slice() : new Array(r));
			for (var s = ge, a = 0; a < r; a += o) {
				n[a] = s * t[a] / 180;
				var h = fe * Math.log(Math.tan(Math.PI * (t[a + 1] + 90) / 360));
				s < h ? h = s : h < -s && (h = -s), n[a + 1] = h
			}
			return n
		}, Me = function(t, e, i) {
			var r = t.length,
				o = 1 < i ? i : 2,
				n = e;
			void 0 === n && (n = 2 < o ? t.slice() : new Array(r));
			for (var s = 0; s < r; s += o) n[s] = 180 * t[s] / ge, n[s + 1] = 360 * Math.atan(Math.exp(
				t[s + 1] / fe)) / Math.PI - 90;
			return n
		}, Re.forEach(function(e) {
			be.forEach(function(t) {
				Oe(e, t, Pe), Oe(t, e, Me)
			})
		});
		var Ze = new Array(6);

		function qe(t) {
			return Qe(t, 1, 0, 0, 1, 0, 0)
		}

		function Je(t, e) {
			var i = t[0],
				r = t[1],
				o = t[2],
				n = t[3],
				s = t[4],
				a = t[5],
				h = e[0],
				l = e[1],
				u = e[2],
				p = e[3],
				c = e[4],
				e = e[5];
			return t[0] = i * h + o * l, t[1] = r * h + n * l, t[2] = i * u + o * p, t[3] = r * u + n * p,
				t[4] = i * c + o * e + s, t[5] = r * c + n * e + a, t
		}

		function Qe(t, e, i, r, o, n, s) {
			return t[0] = e, t[1] = i, t[2] = r, t[3] = o, t[4] = n, t[5] = s, t
		}

		function $e(t, e) {
			return t[0] = e[0], t[1] = e[1], t[2] = e[2], t[3] = e[3], t[4] = e[4], t[5] = e[5], t
		}

		function ti(t, e) {
			var i = e[0],
				r = e[1];
			return e[0] = t[0] * i + t[2] * r + t[4], e[1] = t[1] * i + t[3] * r + t[5], e
		}

		function ei(t, e) {
			var i = Math.cos(e),
				e = Math.sin(e);
			return Je(t, Qe(Ze, i, e, -e, i, 0, 0))
		}

		function ii(t, e, i) {
			return Je(t, Qe(Ze, e, 0, 0, i, 0, 0))
		}

		function ri(t, e, i) {
			return Je(t, Qe(Ze, 1, 0, 0, 1, e, i))
		}

		function oi(t, e, i, r, o, n, s, a) {
			var h = Math.sin(n),
				n = Math.cos(n);
			return t[0] = r * n, t[1] = o * h, t[2] = -r * h, t[3] = o * n, t[4] = s * r * n - a * r * h +
				e, t[5] = s * o * h + a * o * n + i, t
		}

		function ni(t) {
			var e = t[0] * t[3] - t[1] * t[2];
			$(0 != e, 32);
			var i = t[0],
				r = t[1],
				o = t[2],
				n = t[3],
				s = t[4],
				a = t[5];
			return t[0] = n / e, t[1] = -r / e, t[2] = -o / e, t[3] = i / e, t[4] = (o * a - n * s) / e, t[
				5] = -(i * a - r * s) / e, t
		}
		var si, ai = [1, 0, 0, 1, 0, 0],
			hi = ((si = K) && (li.__proto__ = si), ((li.prototype = Object.create(si && si.prototype))
					.constructor = li).prototype.clone = a, li.prototype.closestPointXY = a, li.prototype
				.containsXY = function(t, e) {
					return !1
				}, li.prototype.getClosestPoint = function(t, e) {
					e = e || [NaN, NaN];
					return this.closestPointXY(t[0], t[1], e, 1 / 0), e
				}, li.prototype.intersectsCoordinate = function(t) {
					return this.containsXY(t[0], t[1])
				}, li.prototype.computeExtent = function(t) {
					return a()
				}, li.prototype.getExtent = function(t) {
					return this.extentRevision_ != this.getRevision() && (this.extent_ = this.computeExtent(
						this.extent_), this.extentRevision_ = this.getRevision()), e = this.extent_, (
						t = t) ? (t[0] = e[0], t[1] = e[1], t[2] = e[2], t[3] = e[3], t) : e;
					var e
				}, li.prototype.rotate = function(t, e) {
					a()
				}, li.prototype.scale = function(t, e, i) {
					a()
				}, li.prototype.simplify = function(t) {
					return this.getSimplifiedGeometry(t * t)
				}, li.prototype.getSimplifiedGeometry = function(t) {
					return a()
				}, li.prototype.getType = function() {
					return a()
				}, li.prototype.applyTransform = function(t) {
					a()
				}, li.prototype.intersectsExtent = function(t) {
					return a()
				}, li.prototype.translate = function(t, e) {
					a()
				}, li.prototype.transform = function(t, n) {
					var s = ke(t),
						t = s.getUnits() == pe.TILE_PIXELS ? function(t, e, i) {
							var r = s.getExtent(),
								o = s.getWorldExtent(),
								r = kt(o) / kt(r);
							return oi(ai, o[0], o[3], r, -r, 0, 0, 0), Zt(t, 0, t.length, i, ai, e), We(s,
								n)(t, e, i)
						} : We(s, n);
					return this.applyTransform(t), this
				}, li);

		function li() {
			si.call(this), this.extent_ = [1 / 0, 1 / 0, -1 / 0, -1 / 0], this.extentRevision_ = -1, this
				.simplifiedGeometryCache = {}, this.simplifiedGeometryMaxMinSquaredTolerance = 0, this
				.simplifiedGeometryRevision = 0
		}

		function ui(t) {
			var e;
			return t == Kt.XY ? e = 2 : t == Kt.XYZ || t == Kt.XYM ? e = 3 : t == Kt.XYZM && (e = 4), e
		}
		var pi, ci = ((pi = hi) && (di.__proto__ = pi), ((di.prototype = Object.create(pi && pi.prototype))
			.constructor = di).prototype.computeExtent = function(t) {
			return It(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, t)
		}, di.prototype.getCoordinates = function() {
			return a()
		}, di.prototype.getFirstCoordinate = function() {
			return this.flatCoordinates.slice(0, this.stride)
		}, di.prototype.getFlatCoordinates = function() {
			return this.flatCoordinates
		}, di.prototype.getLastCoordinate = function() {
			return this.flatCoordinates.slice(this.flatCoordinates.length - this.stride)
		}, di.prototype.getLayout = function() {
			return this.layout
		}, di.prototype.getSimplifiedGeometry = function(t) {
			if (this.simplifiedGeometryRevision != this.getRevision() && (_(this
						.simplifiedGeometryCache), this.simplifiedGeometryMaxMinSquaredTolerance =
					0, this.simplifiedGeometryRevision = this.getRevision()), t < 0 || 0 !== this
				.simplifiedGeometryMaxMinSquaredTolerance && t <= this
				.simplifiedGeometryMaxMinSquaredTolerance) return this;
			var e = t.toString();
			if (this.simplifiedGeometryCache.hasOwnProperty(e)) return this.simplifiedGeometryCache[
				e];
			var i = this.getSimplifiedGeometryInternal(t);
			return i.getFlatCoordinates().length < this.flatCoordinates.length ? this
				.simplifiedGeometryCache[e] = i : (this.simplifiedGeometryMaxMinSquaredTolerance =
					t, this)
		}, di.prototype.getSimplifiedGeometryInternal = function(t) {
			return this
		}, di.prototype.getStride = function() {
			return this.stride
		}, di.prototype.setFlatCoordinates = function(t, e) {
			this.stride = ui(t), this.layout = t, this.flatCoordinates = e
		}, di.prototype.setCoordinates = function(t, e) {
			a()
		}, di.prototype.setLayout = function(t, e, i) {
			var r, o, n;
			if (t) r = ui(t);
			else {
				for (var s = 0; s < i; ++s) {
					if (0 === e.length) return this.layout = Kt.XY, void(this.stride = 2);
					e = e[0]
				}
				2 == (o = r = e.length) ? n = Kt.XY : 3 == o ? n = Kt.XYZ : 4 == o && (n = Kt.XYZM),
					t = n
			}
			this.layout = t, this.stride = r
		}, di.prototype.applyTransform = function(t) {
			this.flatCoordinates && (t(this.flatCoordinates, this.flatCoordinates, this.stride),
				this.changed())
		}, di.prototype.rotate = function(t, e) {
			var i, r = this.getFlatCoordinates();
			r && (i = this.getStride(), function(t, e, i, r, o, n) {
				for (var s = n || [], a = Math.cos(r), h = Math.sin(r), l = o[0], u = o[1],
						p = 0, c = 0; c < e; c += i) {
					var d = t[c] - l,
						_ = t[c + 1] - u;
					s[p++] = l + d * a - _ * h, s[p++] = u + d * h + _ * a;
					for (var f = c + 2; f < c + i; ++f) s[p++] = t[f]
				}
				n && s.length != p && (s.length = p)
			}(r, r.length, i, t, e, r), this.changed())
		}, di.prototype.scale = function(t, e, i) {
			var r = e;
			void 0 === r && (r = t);
			var _ = (_ = i) || Gt(this.getExtent()),
				e = this.getFlatCoordinates();
			e && (i = this.getStride(), function(t, e, i, r, o, n) {
				for (var s = n || [], a = _[0], h = _[1], l = 0, u = 0; u < e; u += i) {
					var p = t[u] - a,
						c = t[u + 1] - h;
					s[l++] = a + r * p, s[l++] = h + o * c;
					for (var d = u + 2; d < u + i; ++d) s[l++] = t[d]
				}
				n && s.length != l && (s.length = l)
			}(e, e.length, i, t, r, e), this.changed())
		}, di.prototype.translate = function(t, e) {
			var i, r = this.getFlatCoordinates();
			r && (i = this.getStride(), qt(r, 0, r.length, i, t, e, r), this.changed())
		}, di);

		function di() {
			pi.call(this), this.layout = Kt.XY, this.stride = 2, this.flatCoordinates = null
		}

		function _i(t, e, i, r) {
			for (var o = 0, n = t[i - r], s = t[i - r + 1]; e < i; e += r) {
				var a = t[e],
					h = t[e + 1];
				o += s * a - n * h, n = a, s = h
			}
			return o / 2
		}

		function fi(t, e, i, r) {
			for (var o = 0, n = 0, s = i.length; n < s; ++n) {
				var a = i[n];
				o += _i(t, e, a, r), e = a
			}
			return o
		}

		function gi(t, e, i, r, o, n, s) {
			var a, h = t[e],
				l = t[e + 1],
				u = t[i] - h,
				p = t[i + 1] - l;
			if (0 == u && 0 == p) a = e;
			else {
				var c = ((o - h) * u + (n - l) * p) / (u * u + p * p);
				if (1 < c) a = i;
				else {
					if (0 < c) {
						for (var d = 0; d < r; ++d) s[d] = oe(t[e + d], t[i + d], c);
						return s.length = r, 0
					}
					a = e
				}
			}
			for (var _ = 0; _ < r; ++_) s[_] = t[a + _];
			s.length = r
		}

		function yi(t, e, i, r, o) {
			var n = t[e],
				s = t[e + 1];
			for (e += r; e < i; e += r) {
				var a = t[e],
					h = t[e + 1],
					l = te(n, s, a, h);
				o < l && (o = l), n = a, s = h
			}
			return o
		}

		function mi(t, e, i, r, o) {
			for (var n = 0, s = i.length; n < s; ++n) {
				var a = i[n];
				o = yi(t, e, a, r, o), e = a
			}
			return o
		}

		function vi(t, e, i, r, o, n, s, a, h, l, u) {
			if (e == i) return l;
			var p, c;
			if (0 === o) {
				if ((c = te(s, a, t[e], t[e + 1])) < l) {
					for (p = 0; p < r; ++p) h[p] = t[e + p];
					return h.length = r, c
				}
				return l
			}
			for (var d = u || [NaN, NaN], _ = e + r; _ < i;)
				if (gi(t, _ - r, _, r, s, a, d), (c = te(s, a, d[0], d[1])) < l) {
					for (l = c, p = 0; p < r; ++p) h[p] = d[p];
					_ += h.length = r
				} else _ += r * Math.max((Math.sqrt(c) - Math.sqrt(l)) / o | 0, 1);
			if (n && (gi(t, i - r, e, r, s, a, d), (c = te(s, a, d[0], d[1])) < l)) {
				for (l = c, p = 0; p < r; ++p) h[p] = d[p];
				h.length = r
			}
			return l
		}

		function xi(t, e, i, r, o, n, s, a, h, l, u) {
			for (var p = u || [NaN, NaN], c = 0, d = i.length; c < d; ++c) {
				var _ = i[c];
				l = vi(t, e, _, r, o, n, s, a, h, l, p), e = _
			}
			return l
		}

		function Ei(t, e, i) {
			for (var r = 0, o = i.length; r < o; ++r) t[e++] = i[r];
			return e
		}

		function Si(t, e, i, r) {
			for (var o = 0, n = i.length; o < n; ++o)
				for (var s = i[o], a = 0; a < r; ++a) t[e++] = s[a];
			return e
		}

		function Ci(t, e, i, r, o) {
			for (var n = o || [], s = 0, a = 0, h = i.length; a < h; ++a) {
				var l = Si(t, e, i[a], r);
				e = n[s++] = l
			}
			return n.length = s, n
		}

		function wi(t, e, i, r, o) {
			for (var n = void 0 !== o ? o : [], s = 0, a = e; a < i; a += r) n[s++] = t.slice(a, a + r);
			return n.length = s, n
		}

		function Ti(t, e, i, r, o) {
			for (var n = void 0 !== o ? o : [], s = 0, a = 0, h = i.length; a < h; ++a) {
				var l = i[a];
				n[s++] = wi(t, e, l, r, n[s]), e = l
			}
			return n.length = s, n
		}

		function Ri(t, e, i, r, o) {
			for (var n = void 0 !== o ? o : [], s = 0, a = 0, h = i.length; a < h; ++a) {
				var l = i[a];
				n[s++] = Ti(t, e, l, r, n[s]), e = l[l.length - 1]
			}
			return n.length = s, n
		}

		function Ii(t, e, i, r, o, n, s) {
			var a = (i - e) / r;
			if (a < 3) {
				for (; e < i; e += r) n[s++] = t[e], n[s++] = t[e + 1];
				return s
			}
			var h = new Array(a);
			h[0] = 1, h[a - 1] = 1;
			for (var l = [e, i - r], u = 0; 0 < l.length;) {
				for (var p = l.pop(), c = l.pop(), d = 0, _ = t[c], f = t[c + 1], g = t[p], y = t[p + 1],
						m = c + r; m < p; m += r) {
					var v = $t(t[m], t[m + 1], _, f, g, y);
					d < v && (u = m, d = v)
				}
				o < d && (h[(u - e) / r] = 1, c + r < u && l.push(c, u), u + r < p && l.push(u, p))
			}
			for (var x = 0; x < a; ++x) h[x] && (n[s++] = t[e + x * r], n[s++] = t[e + x * r + 1]);
			return s
		}

		function Li(t, e) {
			return e * Math.round(t / e)
		}

		function bi(t, e, i, r, o, n, s, a) {
			for (var h = 0, l = i.length; h < l; ++h) {
				var u = i[h];
				s = function(t, e, i, r, o, n, s) {
					if (e == i) return s;
					var a, h = Li(t[e], o),
						l = Li(t[e + 1], o);
					e += r, n[s++] = h, n[s++] = l;
					do {
						if (a = Li(t[e], o), _ = Li(t[e + 1], o), (e += r) == i) return n[s++] = a, n[
							s++] = _, s
					} while (a == h && _ == l);
					for (; e < i;) {
						var u, p, c, d, _, f = Li(t[e], o),
							g = Li(t[e + 1], o);
						e += r, f == a && g == _ || (a = ((u = a - h) * (d = g - l) == (p = _ - l) * (
							c = f - h) && (u < 0 && c < u || u == c || 0 < u && u < c) && (
							p < 0 && d < p || p == d || 0 < p && p < d) || (h = n[s++] = a,
							l = n[s++] = _), f), _ = g)
					}
					return n[s++] = a, n[s++] = _, s
				}(t, e, u, r, o, n, s), a.push(s), e = u
			}
			return s
		}
		var Pi, Mi, Fi = ((Mi = ci) && (Ni.__proto__ = Mi), ((Ni.prototype = Object.create(Mi && Mi
				.prototype)).constructor = Ni).prototype.clone = function() {
				return new Ni(this.flatCoordinates.slice(), this.layout)
			}, Ni.prototype.closestPointXY = function(t, e, i, r) {
				return r < mt(this.getExtent(), t, e) ? r : (this.maxDeltaRevision_ != this
				.getRevision() && (this.maxDelta_ = Math.sqrt(yi(this.flatCoordinates, 0, this
						.flatCoordinates.length, this.stride, 0)), this.maxDeltaRevision_ = this
					.getRevision()), vi(this.flatCoordinates, 0, this.flatCoordinates.length,
					this.stride, this.maxDelta_, !0, t, e, i, r))
			}, Ni.prototype.getArea = function() {
				return _i(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride)
			}, Ni.prototype.getCoordinates = function() {
				return wi(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride)
			}, Ni.prototype.getSimplifiedGeometryInternal = function(t) {
				var e = [];
				return e.length = Ii(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride,
					t, e, 0), new Ni(e, Kt.XY)
			}, Ni.prototype.getType = function() {
				return Ht.LINEAR_RING
			}, Ni.prototype.intersectsExtent = function(t) {
				return !1
			}, Ni.prototype.setCoordinates = function(t, e) {
				this.setLayout(e, t, 1), this.flatCoordinates || (this.flatCoordinates = []), this
					.flatCoordinates.length = Si(this.flatCoordinates, 0, t, this.stride), this
					.changed()
			}, Ni),
			Oi = ((Pi = ci) && (Ai.__proto__ = Pi), ((Ai.prototype = Object.create(Pi && Pi.prototype))
				.constructor = Ai).prototype.clone = function() {
				return new Ai(this.flatCoordinates.slice(), this.layout)
			}, Ai.prototype.closestPointXY = function(t, e, i, r) {
				var o = this.flatCoordinates,
					e = te(t, e, o[0], o[1]);
				if (e < r) {
					for (var n = this.stride, s = 0; s < n; ++s) i[s] = o[s];
					return i.length = n, e
				}
				return r
			}, Ai.prototype.getCoordinates = function() {
				return this.flatCoordinates ? this.flatCoordinates.slice() : []
			}, Ai.prototype.computeExtent = function(t) {
				return Rt(this.flatCoordinates, t)
			}, Ai.prototype.getType = function() {
				return Ht.POINT
			}, Ai.prototype.intersectsExtent = function(t) {
				return Et(t, this.flatCoordinates[0], this.flatCoordinates[1])
			}, Ai.prototype.setCoordinates = function(t, e) {
				this.setLayout(e, t, 0), this.flatCoordinates || (this.flatCoordinates = []), this
					.flatCoordinates.length = Ei(this.flatCoordinates, 0, t, this.stride), this
					.changed()
			}, Ai);

		function Ai(t, e) {
			Pi.call(this), this.setCoordinates(t, e)
		}

		function Ni(t, e) {
			Mi.call(this), this.maxDelta_ = -1, this.maxDeltaRevision_ = -1, void 0 === e || Array.isArray(
				t[0]) ? this.setCoordinates(t, e) : this.setFlatCoordinates(e, t)
		}

		function Gi(t, e, i, r, o, n) {
			for (var s = 0, a = t[i - r], h = t[i - r + 1]; e < i; e += r) {
				var l = t[e],
					u = t[e + 1];
				h <= n ? n < u && 0 < (l - a) * (n - h) - (o - a) * (u - h) && s++ : u <= n && (l - a) * (
					n - h) - (o - a) * (u - h) < 0 && s--, a = l, h = u
			}
			return 0 !== s
		}

		function Di(t, e, i, r, o, n) {
			if (0 === i.length) return !1;
			if (!Gi(t, e, i[0], r, o, n)) return !1;
			for (var s = 1, a = i.length; s < a; ++s)
				if (Gi(t, i[s - 1], i[s], r, o, n)) return !1;
			return !0
		}

		function ki(t, e, i, r, o, n, s) {
			for (var a, h, l, u, p = o[n + 1], c = [], d = 0, _ = i.length; d < _; ++d)
				for (var f = i[d], g = t[f - r], y = t[f - r + 1], m = e; m < f; m += r) l = t[m], u = t[m +
					1], (p <= y && u <= p || y <= p && p <= u) && (h = (p - y) / (u - y) * (l - g) + g,
					c.push(h)), g = l, y = u;
			var v = NaN,
				x = -1 / 0;
			for (c.sort(rt), g = c[0], m = 1, a = c.length; m < a; ++m) {
				l = c[m];
				var E = Math.abs(l - g);
				x < E && Di(t, e, i, r, h = (g + l) / 2, p) && (v = h, x = E), g = l
			}
			return isNaN(v) && (v = o[n]), s ? (s.push(v, p, x), s) : [v, p, x]
		}

		function ji(t, e, i, r, o) {
			for (var n = [], s = 0, a = i.length; s < a; ++s) {
				var h = i[s],
					n = ki(t, e, h, r, o, 2 * s, n);
				e = h[h.length - 1]
			}
			return n
		}

		function Ui(t, e, i, r, o, n) {
			for (var s, a = [t[e], t[e + 1]], h = []; e + r < i; e += r) {
				if (h[0] = t[e + r], h[1] = t[e + r + 1], s = o.call(n, a, h)) return s;
				a[0] = h[0], a[1] = h[1]
			}
			return !1
		}

		function Yi(t, e, i, r, d) {
			var o = Mt([1 / 0, 1 / 0, -1 / 0, -1 / 0], t, e, i, r);
			return !!zt(d, o) && (!!xt(d, o) || o[0] >= d[0] && o[2] <= d[2] || o[1] >= d[1] && o[3] <= d[
				3] || Ui(t, e, i, r, function(t, e) {
					return u = !1, p = St(d, t), c = St(d, e), p === pt.INTERSECTING || c === pt
						.INTERSECTING ? u = !0 : (o = d[0], n = d[1], s = d[2], a = d[3], l = t[0],
							h = t[1], t = e[0], l = ((e = e[1]) - h) / (t - l), c & pt.ABOVE && !(
								p & pt.ABOVE) && (u = (i = t - (e - a) / l) >= o && i <= s), u || !(
								c & pt.RIGHT) || p & pt.RIGHT || (u = (r = e - (t - s) * l) >= n &&
								r <= a), u || !(c & pt.BELOW) || p & pt.BELOW || (u = (i = t - (e -
								n) / l) >= o && i <= s), u || !(c & pt.LEFT) || p & pt.LEFT || (u =
								(r = e - (t - o) * l) >= n && r <= a)), u;
					var i, r, o, n, s, a, h, l, u, p, c
				}))
		}

		function Bi(t, e, i, r, o) {
			if (n = t, s = e, a = i[0], !(Yi(n, s, a, h = r, e = o) || Gi(n, s, a, h, e[0], e[1]) || Gi(n,
					s, a, h, e[0], e[3]) || Gi(n, s, a, h, e[2], e[1]) || Gi(n, s, a, h, e[2], e[3])))
				return !1;
			var n, s, a, h;
			if (1 === i.length) return !0;
			for (var l = 1, u = i.length; l < u; ++l)
				if (function(e, i, r, o, t) {
						return !Ft(t, function(t) {
							return !Gi(e, i, r, o, t[0], t[1])
						})
					}(t, i[l - 1], i[l], r, o) && !Yi(t, i[l - 1], i[l], r, o)) return !1;
			return !0
		}

		function zi(t, e, i, r) {
			for (var o = 0, n = t[i - r], s = t[i - r + 1]; e < i; e += r) {
				var a = t[e],
					h = t[e + 1];
				o += (a - n) * (h + s), n = a, s = h
			}
			return 0 < o
		}

		function Xi(t, e, i, r, o) {
			for (var n = void 0 !== o && o, s = 0, a = i.length; s < a; ++s) {
				var h = i[s],
					l = zi(t, e, h, r);
				if (0 === s) {
					if (n && l || !n && !l) return
				} else if (n && !l || !n && l) return;
				e = h
			}
			return 1
		}

		function Vi(t, e, i, r, o) {
			for (var n = void 0 !== o && o, s = 0, a = i.length; s < a; ++s) {
				var h = i[s],
					l = zi(t, e, h, r);
				(0 === s ? n && l || !n && !l : n && !l || !n && l) && function(t, e, i, r) {
					for (; e < i - r;) {
						for (var o = 0; o < r; ++o) {
							var n = t[e + o];
							t[e + o] = t[i - r + o], t[i - r + o] = n
						}
						e += r, i -= r
					}
				}(t, e, h, r), e = h
			}
			return e
		}

		function Wi(t, e, i, r, o) {
			for (var n = 0, s = i.length; n < s; ++n) e = Vi(t, e, i[n], r, o);
			return e
		}
		var Ki, Hi = ((Ki = ci) && (qi.__proto__ = Ki), ((qi.prototype = Object.create(Ki && Ki.prototype))
				.constructor = qi).prototype.appendLinearRing = function(t) {
				this.flatCoordinates ? st(this.flatCoordinates, t.getFlatCoordinates()) : this
					.flatCoordinates = t.getFlatCoordinates().slice(), this.ends_.push(this
						.flatCoordinates.length), this.changed()
			}, qi.prototype.clone = function() {
				return new qi(this.flatCoordinates.slice(), this.layout, this.ends_.slice())
			}, qi.prototype.closestPointXY = function(t, e, i, r) {
				return r < mt(this.getExtent(), t, e) ? r : (this.maxDeltaRevision_ != this
				.getRevision() && (this.maxDelta_ = Math.sqrt(mi(this.flatCoordinates, 0, this
					.ends_, this.stride, 0)), this.maxDeltaRevision_ = this.getRevision()), xi(
					this.flatCoordinates, 0, this.ends_, this.stride, this.maxDelta_, !0, t, e,
					i, r))
			}, qi.prototype.containsXY = function(t, e) {
				return Di(this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride, t, e)
			}, qi.prototype.getArea = function() {
				return fi(this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride)
			}, qi.prototype.getCoordinates = function(t) {
				var e;
				return void 0 !== t ? Vi(e = this.getOrientedFlatCoordinates().slice(), 0, this.ends_,
					this.stride, t) : e = this.flatCoordinates, Ti(e, 0, this.ends_, this.stride)
			}, qi.prototype.getEnds = function() {
				return this.ends_
			}, qi.prototype.getFlatInteriorPoint = function() {
				var t;
				return this.flatInteriorPointRevision_ != this.getRevision() && (t = Gt(this
					.getExtent()), this.flatInteriorPoint_ = ki(this.getOrientedFlatCoordinates(),
						0, this.ends_, this.stride, t, 0), this.flatInteriorPointRevision_ = this
					.getRevision()), this.flatInteriorPoint_
			}, qi.prototype.getInteriorPoint = function() {
				return new Oi(this.getFlatInteriorPoint(), Kt.XYM)
			}, qi.prototype.getLinearRingCount = function() {
				return this.ends_.length
			}, qi.prototype.getLinearRing = function(t) {
				return t < 0 || this.ends_.length <= t ? null : new Fi(this.flatCoordinates.slice(0 ===
					t ? 0 : this.ends_[t - 1], this.ends_[t]), this.layout)
			}, qi.prototype.getLinearRings = function() {
				for (var t = this.layout, e = this.flatCoordinates, i = this.ends_, r = [], o = 0, n =
						0, s = i.length; n < s; ++n) {
					var a = i[n],
						h = new Fi(e.slice(o, a), t);
					r.push(h), o = a
				}
				return r
			}, qi.prototype.getOrientedFlatCoordinates = function() {
				var t;
				return this.orientedRevision_ != this.getRevision() && (Xi(t = this.flatCoordinates, 0,
						this.ends_, this.stride) ? this.orientedFlatCoordinates_ = t : (this
						.orientedFlatCoordinates_ = t.slice(), this.orientedFlatCoordinates_
						.length = Vi(this.orientedFlatCoordinates_, 0, this.ends_, this.stride)),
					this.orientedRevision_ = this.getRevision()), this.orientedFlatCoordinates_
			}, qi.prototype.getSimplifiedGeometryInternal = function(t) {
				var e = [],
					i = [];
				return e.length = bi(this.flatCoordinates, 0, this.ends_, this.stride, Math.sqrt(t), e,
					0, i), new qi(e, Kt.XY, i)
			}, qi.prototype.getType = function() {
				return Ht.POLYGON
			}, qi.prototype.intersectsExtent = function(t) {
				return Bi(this.getOrientedFlatCoordinates(), 0, this.ends_, this.stride, t)
			}, qi.prototype.setCoordinates = function(t, e) {
				this.setLayout(e, t, 2), this.flatCoordinates || (this.flatCoordinates = []);
				t = Ci(this.flatCoordinates, 0, t, this.stride, this.ends_);
				this.flatCoordinates.length = 0 === t.length ? 0 : t[t.length - 1], this.changed()
			}, qi),
			Zi = Hi;

		function qi(t, e, i) {
			Ki.call(this), this.ends_ = [], this.flatInteriorPointRevision_ = -1, this.flatInteriorPoint_ =
				null, this.maxDelta_ = -1, this.maxDeltaRevision_ = -1, this.orientedRevision_ = -1, this
				.orientedFlatCoordinates_ = null, void 0 !== e && i ? (this.setFlatCoordinates(e, t), this
					.ends_ = i) : this.setCoordinates(t, e)
		}

		function Ji(t, e, i, r) {
			for (var o, n, s, a, h, l = i || 32, u = [], p = 0; p < l; ++p) st(u, (o = t, n = e, s = 2 *
				Math.PI * p / l, h = h = void 0, h = (a = r) || ne, a = ie(o[1]), o = ie(o[0]), n /=
				h, h = Math.asin(Math.sin(a) * Math.cos(n) + Math.cos(a) * Math.sin(n) * Math.cos(
					s)), [ee(o + Math.atan2(Math.sin(s) * Math.sin(n) * Math.cos(a), Math.cos(n) -
					Math.sin(a) * Math.sin(h))), ee(h)]));
			return u.push(u[0], u[1]), new Hi(u, Kt.XY, [u.length])
		}

		function Qi(t) {
			var e = t[0],
				i = t[1],
				r = t[2],
				t = t[3],
				i = [e, i, e, t, r, t, r, i, e, i];
			return new Hi(i, Kt.XY, [i.length])
		}

		function $i(t, e, i) {
			for (var r = e || 32, o = t.getStride(), e = t.getLayout(), n = t.getCenter(), s = o * (r + 1),
					a = new Array(s), h = 0; h < s; h += o) {
				a[h] = 0, a[h + 1] = 0;
				for (var l = 2; l < o; l++) a[h + l] = n[l]
			}
			r = [a.length], r = new Hi(a, e, r);
			return tr(r, n, t.getRadius(), i), r
		}

		function tr(t, e, i, r) {
			for (var o = t.getFlatCoordinates(), n = t.getStride(), s = o.length / n - 1, a = r || 0, h =
				0; h <= s; ++h) {
				var l = h * n,
					u = a + 2 * re(h, s) * Math.PI / s;
				o[l] = e[0] + i * Math.cos(u), o[1 + l] = e[1] + i * Math.sin(u)
			}
			t.changed()
		}
		var er, ir, rr = "undefined" != typeof navigator ? navigator.userAgent.toLowerCase() : "",
			or = -1 !== rr.indexOf("firefox"),
			nr = -1 !== rr.indexOf("safari") && -1 == rr.indexOf("chrom"),
			sr = -1 !== rr.indexOf("webkit") && -1 == rr.indexOf("edge"),
			ar = -1 !== rr.indexOf("macintosh"),
			hr = window.devicePixelRatio || 1,
			lr = function() {
				var t = !1;
				try {
					t = !!document.createElement("canvas").getContext("2d").setLineDash
				} catch (t) {}
				return t
			}(),
			ur = "geolocation" in navigator,
			pr = "ontouchstart" in window,
			cr = "PointerEvent" in window,
			dr = !!navigator.msPointerEnabled,
			_r = "accuracy",
			fr = "accuracyGeometry",
			gr = "altitude",
			yr = "altitudeAccuracy",
			mr = "heading",
			vr = "position",
			xr = "projection",
			Er = "speed",
			Sr = "tracking",
			Cr = "trackingOptions",
			wr = ((ir = F) && (Ir.__proto__ = ir), (Ir.prototype = Object.create(ir && ir.prototype))
				.constructor = Ir),
			Tr = ((er = K) && (Rr.__proto__ = er), ((Rr.prototype = Object.create(er && er.prototype))
				.constructor = Rr).prototype.disposeInternal = function() {
				this.setTracking(!1), er.prototype.disposeInternal.call(this)
			}, Rr.prototype.handleProjectionChanged_ = function() {
				var t = this.getProjection();
				t && (this.transform_ = Ve(ke("EPSG:4326"), t), this.position_ && this.set(vr, this
					.transform_(this.position_)))
			}, Rr.prototype.handleTrackingChanged_ = function() {
				var t;
				ur && ((t = this.getTracking()) && void 0 === this.watchId_ ? this.watchId_ = navigator
					.geolocation.watchPosition(this.positionChange_.bind(this), this.positionError_
						.bind(this), this.getTrackingOptions()) : t || void 0 === this.watchId_ || (
						navigator.geolocation.clearWatch(this.watchId_), this.watchId_ = void 0))
			}, Rr.prototype.positionChange_ = function(t) {
				var e = t.coords;
				this.set(_r, e.accuracy), this.set(gr, null === e.altitude ? void 0 : e.altitude), this
					.set(yr, null === e.altitudeAccuracy ? void 0 : e.altitudeAccuracy), this.set(mr,
						null === e.heading ? void 0 : ie(e.heading)), this.position_ ? (this.position_[
						0] = e.longitude, this.position_[1] = e.latitude) : this.position_ = [e
						.longitude, e.latitude
					];
				t = this.transform_(this.position_);
				this.set(vr, t), this.set(Er, null === e.speed ? void 0 : e.speed);
				e = Ji(this.position_, e.accuracy);
				e.applyTransform(this.transform_), this.set(fr, e), this.changed()
			}, Rr.prototype.positionError_ = function(t) {
				this.setTracking(!1), this.dispatchEvent(new wr(t))
			}, Rr.prototype.getAccuracy = function() {
				return this.get(_r)
			}, Rr.prototype.getAccuracyGeometry = function() {
				return this.get(fr) || null
			}, Rr.prototype.getAltitude = function() {
				return this.get(gr)
			}, Rr.prototype.getAltitudeAccuracy = function() {
				return this.get(yr)
			}, Rr.prototype.getHeading = function() {
				return this.get(mr)
			}, Rr.prototype.getPosition = function() {
				return this.get(vr)
			}, Rr.prototype.getProjection = function() {
				return this.get(xr)
			}, Rr.prototype.getSpeed = function() {
				return this.get(Er)
			}, Rr.prototype.getTracking = function() {
				return this.get(Sr)
			}, Rr.prototype.getTrackingOptions = function() {
				return this.get(Cr)
			}, Rr.prototype.setProjection = function(t) {
				this.set(xr, ke(t))
			}, Rr.prototype.setTracking = function(t) {
				this.set(Sr, t)
			}, Rr.prototype.setTrackingOptions = function(t) {
				this.set(Cr, t)
			}, Rr);

		function Rr(t) {
			er.call(this);
			t = t || {};
			this.position_ = null, this.transform_ = Ge, this.watchId_ = void 0, E(this, z(xr), this
					.handleProjectionChanged_, this), E(this, z(Sr), this.handleTrackingChanged_, this),
				void 0 !== t.projection && this.setProjection(t.projection), void 0 !== t.trackingOptions &&
				this.setTrackingOptions(t.trackingOptions), this.setTracking(void 0 !== t.tracking && t
					.tracking)
		}

		function Ir(t) {
			ir.call(this, A.ERROR), this.code = t.code, this.message = t.message
		}

		function Lr(t, e, i) {
			i = void 0 !== i ? t.toFixed(i) : "" + t, t = i.indexOf(".");
			return (t = -1 === t ? i.length : t) > e ? i : new Array(1 + e - t).join("0") + i
		}

		function br(t, e) {
			for (var i = ("" + t).split("."), r = ("" + e).split("."), o = 0; o < Math.max(i.length, r
					.length); o++) {
				var n = parseInt(i[o] || "0", 10),
					s = parseInt(r[o] || "0", 10);
				if (s < n) return 1;
				if (n < s) return -1
			}
			return 0
		}

		function Pr(t, e) {
			return t[0] += e[0], t[1] += e[1], t
		}

		function Mr(t, e) {
			var i, r = t[0],
				o = t[1],
				n = e[0],
				s = e[1],
				a = n[0],
				h = n[1],
				t = s[0],
				e = s[1],
				n = t - a,
				s = e - h,
				o = 0 == n && 0 == s ? 0 : (n * (r - a) + s * (o - h)) / (n * n + s * s || 0),
				s = o <= 0 ? (i = a, h) : 1 <= o ? (i = t, e) : (i = a + o * n, h + o * s);
			return [i, s]
		}

		function Fr(t, e, i) {
			var r = re(e + 180, 360) - 180,
				o = Math.abs(3600 * r),
				n = i || 0,
				s = Math.pow(10, n),
				e = Math.floor(o / 3600),
				i = Math.floor((o - 3600 * e) / 60),
				o = o - 3600 * e - 60 * i;
			return 60 <= (o = Math.ceil(o * s) / s) && (o = 0, i += 1), 60 <= i && (i = 0, e += 1), e +
				"° " + Lr(i, 2) + "′ " + Lr(o, 2, n) + "″" + (0 == r ? "" : " " + t.charAt(r < 0 ? 1 : 0))
		}

		function Or(t, e, i) {
			return t ? e.replace("{x}", t[0].toFixed(i)).replace("{y}", t[1].toFixed(i)) : ""
		}

		function Ar(t, e) {
			for (var i = !0, r = t.length - 1; 0 <= r; --r)
				if (t[r] != e[r]) {
					i = !1;
					break
				} return i
		}

		function Nr(t, e) {
			var i = Math.cos(e),
				r = Math.sin(e),
				e = t[0] * i - t[1] * r,
				r = t[1] * i + t[0] * r;
			return t[0] = e, t[1] = r, t
		}

		function Gr(t, e) {
			return t[0] *= e, t[1] *= e, t
		}

		function Dr(t, e) {
			var i = t[0] - e[0],
				e = t[1] - e[1];
			return i * i + e * e
		}

		function kr(t, e) {
			return Math.sqrt(Dr(t, e))
		}

		function jr(t, e) {
			return Dr(t, Mr(t, e))
		}

		function Ur(t, e) {
			return Or(t, "{x}, {y}", e)
		}

		function Yr(t, e, i, r, o, n) {
			var s = NaN,
				a = NaN,
				h = (i - e) / r;
			if (1 == h) s = t[e], a = t[e + 1];
			else if (2 == h) s = (1 - o) * t[e] + o * t[e + r], a = (1 - o) * t[e + 1] + o * t[e + r + 1];
			else if (0 != h) {
				for (var l = t[e], u = t[e + 1], p = 0, c = [0], d = e + r; d < i; d += r) {
					var _ = t[d],
						f = t[d + 1];
					p += Math.sqrt((_ - l) * (_ - l) + (f - u) * (f - u)), c.push(p), l = _, u = f
				}
				var g = o * p,
					h = function(t, e) {
						for (var i, r, o = rt, n = 0, s = t.length, a = !1; n < s;)(r = +o(t[i = n + (s -
							n >> 1)], e)) < 0 ? n = i + 1 : (s = i, a = !r);
						return a ? n : ~n
					}(c, g);
				a = h < 0 ? (o = (g - c[-h - 2]) / (c[-h - 1] - c[-h - 2]), s = oe(t[g = e + (-h - 2) * r],
					t[g + r], o), oe(t[g + 1], t[g + r + 1], o)) : (s = t[e + h * r], t[e + h * r + 1])
			}
			return n ? (n[0] = s, n[1] = a, n) : [s, a]
		}

		function Br(t, e, i, r, o, n) {
			if (i == e) return null;
			if (o < t[e + r - 1]) return n ? ((u = t.slice(e, e + r))[r - 1] = o, u) : null;
			if (t[i - 1] < o) return n ? ((u = t.slice(i - r, i))[r - 1] = o, u) : null;
			if (o == t[e + r - 1]) return t.slice(e, e + r);
			for (var s = e / r, a = i / r; s < a;) {
				var h = s + a >> 1;
				o < t[(1 + h) * r - 1] ? a = h : s = 1 + h
			}
			i = t[s * r - 1];
			if (o == i) return t.slice((s - 1) * r, (s - 1) * r + r);
			for (var l = (o - i) / (t[(s + 1) * r - 1] - i), u = [], p = 0; p < r - 1; ++p) u.push(oe(t[(s -
				1) * r + p], t[s * r + p], l));
			return u.push(o), u
		}

		function zr(t, e, i, r) {
			for (var o = t[e], n = t[e + 1], s = 0, a = e + r; a < i; a += r) {
				var h = t[a],
					l = t[a + 1];
				s += Math.sqrt((h - o) * (h - o) + (l - n) * (l - n)), o = h, n = l
			}
			return s
		}
		var Xr, Vr = ((Xr = ci) && (Wr.__proto__ = Xr), ((Wr.prototype = Object.create(Xr && Xr.prototype))
			.constructor = Wr).prototype.appendCoordinate = function(t) {
			this.flatCoordinates ? st(this.flatCoordinates, t) : this.flatCoordinates = t.slice(),
				this.changed()
		}, Wr.prototype.clone = function() {
			return new Wr(this.flatCoordinates.slice(), this.layout)
		}, Wr.prototype.closestPointXY = function(t, e, i, r) {
			return r < mt(this.getExtent(), t, e) ? r : (this.maxDeltaRevision_ != this
			.getRevision() && (this.maxDelta_ = Math.sqrt(yi(this.flatCoordinates, 0, this
					.flatCoordinates.length, this.stride, 0)), this.maxDeltaRevision_ = this
				.getRevision()), vi(this.flatCoordinates, 0, this.flatCoordinates.length,
				this.stride, this.maxDelta_, !1, t, e, i, r))
		}, Wr.prototype.forEachSegment = function(t) {
			return Ui(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, t)
		}, Wr.prototype.getCoordinateAtM = function(t, e) {
			if (this.layout != Kt.XYM && this.layout != Kt.XYZM) return null;
			e = void 0 !== e && e;
			return Br(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, t, e)
		}, Wr.prototype.getCoordinates = function() {
			return wi(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride)
		}, Wr.prototype.getCoordinateAt = function(t, e) {
			return Yr(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, t, e)
		}, Wr.prototype.getLength = function() {
			return zr(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride)
		}, Wr.prototype.getFlatMidpoint = function() {
			return this.flatMidpointRevision_ != this.getRevision() && (this.flatMidpoint_ = this
				.getCoordinateAt(.5, this.flatMidpoint_), this.flatMidpointRevision_ = this
				.getRevision()), this.flatMidpoint_
		}, Wr.prototype.getSimplifiedGeometryInternal = function(t) {
			var e = [];
			return e.length = Ii(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride,
				t, e, 0), new Wr(e, Kt.XY)
		}, Wr.prototype.getType = function() {
			return Ht.LINE_STRING
		}, Wr.prototype.intersectsExtent = function(t) {
			return Yi(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride, t)
		}, Wr.prototype.setCoordinates = function(t, e) {
			this.setLayout(e, t, 1), this.flatCoordinates || (this.flatCoordinates = []), this
				.flatCoordinates.length = Si(this.flatCoordinates, 0, t, this.stride), this
				.changed()
		}, Wr);

		function Wr(t, e) {
			Xr.call(this), this.flatMidpoint_ = null, this.flatMidpointRevision_ = -1, this.maxDelta_ = -1,
				this.maxDeltaRevision_ = -1, void 0 === e || Array.isArray(t[0]) ? this.setCoordinates(t,
				e) : this.setFlatCoordinates(e, t)
		}

		function Kr(t, e, i) {
			for (var r, o, n, s, a, h, l = [], u = t(0), p = t(1), c = e(u), d = e(p), _ = [p, u], f = [d,
					c], g = [1, 0], y = {}, m = 1e5; 0 < --m && 0 < g.length;) n = g.pop(), u = _.pop(), c =
				f.pop(), (h = n.toString()) in y || (l.push(c[0], c[1]), y[h] = !0), s = g.pop(), p = _
				.pop(), d = f.pop(), $t((o = e(r = t(a = (n + s) / 2)))[0], o[1], c[0], c[1], d[0], d[1]) <
				i ? (l.push(d[0], d[1]), y[h = s.toString()] = !0) : (g.push(s, a, a, n), f.push(d, o, o,
					c), _.push(p, r, r, u));
			return l
		}
		var Hr = "postcompose",
			Zr = "precompose",
			qr = "render",
			Jr = "rendercomplete",
			Qr = /^#([a-f0-9]{3}|[a-f0-9]{4}(?:[a-f0-9]{2}){0,2})$/i,
			$r = /^([a-z]*)$/i;

		function to(t) {
			return "string" == typeof t ? t : so(t)
		}
		var eo, io, ro = (eo = {}, io = 0, function(t) {
			var e, i, r, o, n, s, a, h;
			if (eo.hasOwnProperty(t)) e = eo[t];
			else {
				if (1024 <= io) {
					var l, u = 0;
					for (l in eo) 0 == (3 & u++) && (delete eo[l], --io)
				}
				i = t, $r.exec(i) && (i = function(t) {
						var e = document.createElement("div");
						if (e.style.color = t, "" === e.style.color) return "";
						document.body.appendChild(e);
						t = getComputedStyle(e).color;
						return document.body.removeChild(e), t
					}(i)), Qr.exec(i) ? (r = (h = i.length - 1) <= 4 ? 1 : 2, o = 4 == h || 8 == h,
						n = parseInt(i.substr(1 + 0 * r, r), 16), s = parseInt(i.substr(1 + r, r),
							16), a = parseInt(i.substr(1 + 2 * r, r), 16), h = o ? parseInt(i
							.substr(1 + 3 * r, r), 16) : 255, 1 == r && (n = (n << 4) + n, s = (s <<
							4) + s, a = (a << 4) + a, o && (h = (h << 4) + h)), h = [n, s, a, h /
							255
						]) : 0 == i.indexOf("rgba(") ? no(h = i.slice(5, -1).split(",").map(
					Number)) : 0 == i.indexOf("rgb(") ? ((h = i.slice(4, -1).split(",").map(Number))
						.push(1), no(h)) : $(!1, 14), e = h, eo[t] = e, ++io
			}
			return e
		});

		function oo(t) {
			return Array.isArray(t) ? t : ro(t)
		}

		function no(t) {
			return t[0] = Jt(t[0] + .5 | 0, 0, 255), t[1] = Jt(t[1] + .5 | 0, 0, 255), t[2] = Jt(t[2] + .5 |
				0, 0, 255), t[3] = Jt(t[3], 0, 1), t
		}

		function so(t) {
			var e = t[0];
			e != (0 | e) && (e = e + .5 | 0);
			var i = t[1];
			i != (0 | i) && (i = i + .5 | 0);
			var r = t[2];
			return r != (0 | r) && (r = r + .5 | 0), "rgba(" + e + "," + i + "," + r + "," + (void 0 === t[
				3] ? 1 : t[3]) + ")"
		}
		var ao = function(t) {
			t = t || {};
			this.color_ = void 0 !== t.color ? t.color : null, this.checksum_ = void 0
		};
		ao.prototype.clone = function() {
			var t = this.getColor();
			return new ao({
				color: Array.isArray(t) ? t.slice() : t || void 0
			})
		}, ao.prototype.getColor = function() {
			return this.color_
		}, ao.prototype.setColor = function(t) {
			this.color_ = t, this.checksum_ = void 0
		}, ao.prototype.getChecksum = function() {
			var t;
			return void 0 === this.checksum_ && ((t = this.color_) ? Array.isArray(t) || "string" ==
				typeof t ? this.checksum_ = "f" + to(t) : this.checksum_ = ct(this.color_) : this
				.checksum_ = "f-"), this.checksum_
		};
		var ho = ao,
			lo = function(t) {
				t = t || {};
				this.color_ = void 0 !== t.color ? t.color : null, this.lineCap_ = t.lineCap, this
					.lineDash_ = void 0 !== t.lineDash ? t.lineDash : null, this.lineDashOffset_ = t
					.lineDashOffset, this.lineJoin_ = t.lineJoin, this.miterLimit_ = t.miterLimit, this
					.width_ = t.width, this.checksum_ = void 0
			};
		lo.prototype.clone = function() {
			var t = this.getColor();
			return new lo({
				color: Array.isArray(t) ? t.slice() : t || void 0,
				lineCap: this.getLineCap(),
				lineDash: this.getLineDash() ? this.getLineDash().slice() : void 0,
				lineDashOffset: this.getLineDashOffset(),
				lineJoin: this.getLineJoin(),
				miterLimit: this.getMiterLimit(),
				width: this.getWidth()
			})
		}, lo.prototype.getColor = function() {
			return this.color_
		}, lo.prototype.getLineCap = function() {
			return this.lineCap_
		}, lo.prototype.getLineDash = function() {
			return this.lineDash_
		}, lo.prototype.getLineDashOffset = function() {
			return this.lineDashOffset_
		}, lo.prototype.getLineJoin = function() {
			return this.lineJoin_
		}, lo.prototype.getMiterLimit = function() {
			return this.miterLimit_
		}, lo.prototype.getWidth = function() {
			return this.width_
		}, lo.prototype.setColor = function(t) {
			this.color_ = t, this.checksum_ = void 0
		}, lo.prototype.setLineCap = function(t) {
			this.lineCap_ = t, this.checksum_ = void 0
		}, lo.prototype.setLineDash = function(t) {
			this.lineDash_ = t, this.checksum_ = void 0
		}, lo.prototype.setLineDashOffset = function(t) {
			this.lineDashOffset_ = t, this.checksum_ = void 0
		}, lo.prototype.setLineJoin = function(t) {
			this.lineJoin_ = t, this.checksum_ = void 0
		}, lo.prototype.setMiterLimit = function(t) {
			this.miterLimit_ = t, this.checksum_ = void 0
		}, lo.prototype.setWidth = function(t) {
			this.width_ = t, this.checksum_ = void 0
		}, lo.prototype.getChecksum = function() {
			return void 0 === this.checksum_ && (this.checksum_ = "s", this.color_ ? "string" ==
				typeof this.color_ ? this.checksum_ += this.color_ : this.checksum_ += ct(this
					.color_) : this.checksum_ += "-", this.checksum_ += "," + (void 0 !== this
					.lineCap_ ? this.lineCap_.toString() : "-") + "," + (this.lineDash_ ? this
					.lineDash_.toString() : "-") + "," + (void 0 !== this.lineDashOffset_ ? this
					.lineDashOffset_ : "-") + "," + (void 0 !== this.lineJoin_ ? this.lineJoin_ :
					"-") + "," + (void 0 !== this.miterLimit_ ? this.miterLimit_.toString() : "-") +
				"," + (void 0 !== this.width_ ? this.width_.toString() : "-")), this.checksum_
		};
		var uo = lo,
			po = function(t) {
				t = t || {};
				this.font_ = t.font, this.rotation_ = t.rotation, this.rotateWithView_ = t.rotateWithView,
					this.scale_ = t.scale, this.text_ = t.text, this.textAlign_ = t.textAlign, this
					.textBaseline_ = t.textBaseline, this.fill_ = void 0 !== t.fill ? t.fill : new ho({
						color: "#333"
					}), this.maxAngle_ = void 0 !== t.maxAngle ? t.maxAngle : Math.PI / 4, this.placement_ =
					void 0 !== t.placement ? t.placement : "point", this.overflow_ = !!t.overflow, this
					.stroke_ = void 0 !== t.stroke ? t.stroke : null, this.offsetX_ = void 0 !== t.offsetX ?
					t.offsetX : 0, this.offsetY_ = void 0 !== t.offsetY ? t.offsetY : 0, this
					.backgroundFill_ = t.backgroundFill || null, this.backgroundStroke_ = t
					.backgroundStroke || null, this.padding_ = void 0 === t.padding ? null : t.padding
			};
		po.prototype.clone = function() {
			return new po({
				font: this.getFont(),
				placement: this.getPlacement(),
				maxAngle: this.getMaxAngle(),
				overflow: this.getOverflow(),
				rotation: this.getRotation(),
				rotateWithView: this.getRotateWithView(),
				scale: this.getScale(),
				text: this.getText(),
				textAlign: this.getTextAlign(),
				textBaseline: this.getTextBaseline(),
				fill: this.getFill() ? this.getFill().clone() : void 0,
				stroke: this.getStroke() ? this.getStroke().clone() : void 0,
				offsetX: this.getOffsetX(),
				offsetY: this.getOffsetY(),
				backgroundFill: this.getBackgroundFill() ? this.getBackgroundFill().clone() :
					void 0,
				backgroundStroke: this.getBackgroundStroke() ? this.getBackgroundStroke()
				.clone() : void 0
			})
		}, po.prototype.getOverflow = function() {
			return this.overflow_
		}, po.prototype.getFont = function() {
			return this.font_
		}, po.prototype.getMaxAngle = function() {
			return this.maxAngle_
		}, po.prototype.getPlacement = function() {
			return this.placement_
		}, po.prototype.getOffsetX = function() {
			return this.offsetX_
		}, po.prototype.getOffsetY = function() {
			return this.offsetY_
		}, po.prototype.getFill = function() {
			return this.fill_
		}, po.prototype.getRotateWithView = function() {
			return this.rotateWithView_
		}, po.prototype.getRotation = function() {
			return this.rotation_
		}, po.prototype.getScale = function() {
			return this.scale_
		}, po.prototype.getStroke = function() {
			return this.stroke_
		}, po.prototype.getText = function() {
			return this.text_
		}, po.prototype.getTextAlign = function() {
			return this.textAlign_
		}, po.prototype.getTextBaseline = function() {
			return this.textBaseline_
		}, po.prototype.getBackgroundFill = function() {
			return this.backgroundFill_
		}, po.prototype.getBackgroundStroke = function() {
			return this.backgroundStroke_
		}, po.prototype.getPadding = function() {
			return this.padding_
		}, po.prototype.setOverflow = function(t) {
			this.overflow_ = t
		}, po.prototype.setFont = function(t) {
			this.font_ = t
		}, po.prototype.setMaxAngle = function(t) {
			this.maxAngle_ = t
		}, po.prototype.setOffsetX = function(t) {
			this.offsetX_ = t
		}, po.prototype.setOffsetY = function(t) {
			this.offsetY_ = t
		}, po.prototype.setPlacement = function(t) {
			this.placement_ = t
		}, po.prototype.setFill = function(t) {
			this.fill_ = t
		}, po.prototype.setRotation = function(t) {
			this.rotation_ = t
		}, po.prototype.setScale = function(t) {
			this.scale_ = t
		}, po.prototype.setStroke = function(t) {
			this.stroke_ = t
		}, po.prototype.setText = function(t) {
			this.text_ = t
		}, po.prototype.setTextAlign = function(t) {
			this.textAlign_ = t
		}, po.prototype.setTextBaseline = function(t) {
			this.textBaseline_ = t
		}, po.prototype.setBackgroundFill = function(t) {
			this.backgroundFill_ = t
		}, po.prototype.setBackgroundStroke = function(t) {
			this.backgroundStroke_ = t
		}, po.prototype.setPadding = function(t) {
			this.padding_ = t
		};
		var co = po,
			_o = new uo({
				color: "rgba(0,0,0,0.2)"
			}),
			fo = [90, 45, 30, 20, 10, 5, 2, 1, .5, .2, .1, .05, .01, .005, .002, .001],
			go = function(t) {
				t = t || {};
				this.map_ = null, this.postcomposeListenerKey_ = null, this.projection_ = null, this
					.maxLat_ = 1 / 0, this.maxLon_ = 1 / 0, this.minLat_ = -1 / 0, this.minLon_ = -1 / 0,
					this.maxLatP_ = 1 / 0, this.maxLonP_ = 1 / 0, this.minLatP_ = -1 / 0, this.minLonP_ = -
					1 / 0, this.targetSize_ = void 0 !== t.targetSize ? t.targetSize : 100, this.maxLines_ =
					void 0 !== t.maxLines ? t.maxLines : 100, this.meridians_ = [], this.parallels_ = [],
					this.strokeStyle_ = void 0 !== t.strokeStyle ? t.strokeStyle : _o, this
					.fromLonLatTransform_ = void 0, this.toLonLatTransform_ = void 0, this
					.projectionCenterLonLat_ = null, this.meridiansLabels_ = null, this.parallelsLabels_ =
					null, 1 == t.showLabels && (this.lonLabelFormatter_ = null == t.lonLabelFormatter ? Fr
						.bind(this, "EW") : t.lonLabelFormatter, this.latLabelFormatter_ = null == t
						.latLabelFormatter ? Fr.bind(this, "NS") : t.latLabelFormatter, this
						.lonLabelPosition_ = null == t.lonLabelPosition ? 0 : t.lonLabelPosition, this
						.latLabelPosition_ = null == t.latLabelPosition ? 1 : t.latLabelPosition, this
						.lonLabelStyle_ = void 0 !== t.lonLabelStyle ? t.lonLabelStyle : new co({
							font: "12px Calibri,sans-serif",
							textBaseline: "bottom",
							fill: new ho({
								color: "rgba(0,0,0,1)"
							}),
							stroke: new uo({
								color: "rgba(255,255,255,1)",
								width: 3
							})
						}), this.latLabelStyle_ = void 0 !== t.latLabelStyle ? t.latLabelStyle : new co({
							font: "12px Calibri,sans-serif",
							textAlign: "end",
							fill: new ho({
								color: "rgba(0,0,0,1)"
							}),
							stroke: new uo({
								color: "rgba(255,255,255,1)",
								width: 3
							})
						}), this.meridiansLabels_ = [], this.parallelsLabels_ = []), this.intervals_ =
					void 0 !== t.intervals ? t.intervals : fo, this.setMap(void 0 !== t.map ? t.map : null)
			};
		go.prototype.addMeridian_ = function(t, e, i, r, o, n) {
			r = this.getMeridian_(t, e, i, r, n);
			return zt(r.getExtent(), o) && (this.meridiansLabels_ && (o = this.getMeridianPoint_(r, o,
				n), this.meridiansLabels_[n] = {
				geom: o,
				text: this.lonLabelFormatter_(t)
			}), this.meridians_[n++] = r), n
		}, go.prototype.getMeridianPoint_ = function(t, e, i) {
			var r, o = t.getFlatCoordinates(),
				n = Math.max(e[1], o[1]),
				t = Math.min(e[3], o[o.length - 1]),
				t = Jt(e[1] + Math.abs(e[1] - e[3]) * this.lonLabelPosition_, n, t),
				t = [o[0], t];
			return i in this.meridiansLabels_ ? (r = this.meridiansLabels_[i].geom).setCoordinates(t) :
				r = new Oi(t), r
		}, go.prototype.addParallel_ = function(t, e, i, r, o, n) {
			r = this.getParallel_(t, e, i, r, n);
			return zt(r.getExtent(), o) && (this.parallelsLabels_ && (o = this.getParallelPoint_(r, o,
				n), this.parallelsLabels_[n] = {
				geom: o,
				text: this.latLabelFormatter_(t)
			}), this.parallels_[n++] = r), n
		}, go.prototype.getParallelPoint_ = function(t, e, i) {
			var r, o = t.getFlatCoordinates(),
				n = Math.max(e[0], o[0]),
				t = Math.min(e[2], o[o.length - 2]),
				o = [Jt(e[0] + Math.abs(e[0] - e[2]) * this.latLabelPosition_, n, t), o[1]];
			return i in this.parallelsLabels_ ? (r = this.parallelsLabels_[i].geom).setCoordinates(o) :
				r = new Oi(o), r
		}, go.prototype.createGraticule_ = function(t, e, i, r) {
			var o = this.getInterval_(i);
			if (-1 == o) return this.meridians_.length = this.parallels_.length = 0, this
				.meridiansLabels_ && (this.meridiansLabels_.length = 0), void(this
					.parallelsLabels_ && (this.parallelsLabels_.length = 0));
			for (var n, s = this.toLonLatTransform_(e), i = s[0], e = s[1], a = this.maxLines_, s = [
						Math.max(t[0], this.minLonP_), Math.max(t[1], this.minLatP_), Math.min(t[2],
							this.maxLonP_), Math.min(t[3], this.maxLatP_)
					], h = (s = He(s, this.projection_, "EPSG:4326"))[3], l = s[2], u = s[1], p = s[0],
					c = Jt(i = Math.floor(i / o) * o, this.minLon_, this.maxLon_), d = this
					.addMeridian_(c, u, h, r, t, 0), _ = 0; c != this.minLon_ && _++ < a;) c = Math.max(
				c - o, this.minLon_), d = this.addMeridian_(c, u, h, r, t, d);
			for (c = Jt(i, this.minLon_, this.maxLon_), _ = 0; c != this.maxLon_ && _++ < a;) c = Math
				.min(c + o, this.maxLon_), d = this.addMeridian_(c, u, h, r, t, d);
			for (this.meridians_.length = d, this.meridiansLabels_ && (this.meridiansLabels_.length =
				d), n = Jt(e = Math.floor(e / o) * o, this.minLat_, this.maxLat_), d = this
				.addParallel_(n, p, l, r, t, 0), _ = 0; n != this.minLat_ && _++ < a;) n = Math.max(n -
				o, this.minLat_), d = this.addParallel_(n, p, l, r, t, d);
			for (n = Jt(e, this.minLat_, this.maxLat_), _ = 0; n != this.maxLat_ && _++ < a;) n = Math
				.min(n + o, this.maxLat_), d = this.addParallel_(n, p, l, r, t, d);
			this.parallels_.length = d, this.parallelsLabels_ && (this.parallelsLabels_.length = d)
		}, go.prototype.getInterval_ = function(t) {
			for (var e = this.projectionCenterLonLat_[0], i = this.projectionCenterLonLat_[1], r = -1,
					o = Math.pow(this.targetSize_ * t, 2), n = [], s = [], a = 0, h = this.intervals_
					.length; a < h; ++a) {
				var l = this.intervals_[a] / 2;
				if (n[0] = e - l, n[1] = i - l, s[0] = e + l, s[1] = i + l, this.fromLonLatTransform_(n,
						n), this.fromLonLatTransform_(s, s), Math.pow(s[0] - n[0], 2) + Math.pow(s[1] -
						n[1], 2) <= o) break;
				r = this.intervals_[a]
			}
			return r
		}, go.prototype.getMap = function() {
			return this.map_
		}, go.prototype.getMeridian_ = function(t, e, i, r, o) {
			var n, s, a, i = (n = t, s = e, a = i, i = this.projection_, r = r, Kr(function(t) {
					return [n, s + (a - s) * t]
				}, We(ke("EPSG:4326"), i), r)),
				r = this.meridians_[o];
			return r ? (r.setFlatCoordinates(Kt.XY, i), r.changed()) : r = this.meridians_[o] = new Vr(
				i, Kt.XY), r
		}, go.prototype.getMeridians = function() {
			return this.meridians_
		}, go.prototype.getParallel_ = function(t, e, i, r, o) {
			var n, s, a, r = (n = t, s = e, a = i, i = this.projection_, r = r, Kr(function(t) {
					return [s + (a - s) * t, n]
				}, We(ke("EPSG:4326"), i), r)),
				o = this.parallels_[o];
			return o ? (o.setFlatCoordinates(Kt.XY, r), o.changed()) : o = new Vr(r, Kt.XY), o
		}, go.prototype.getParallels = function() {
			return this.parallels_
		}, go.prototype.handlePostCompose_ = function(t) {
			var e, i, r, o, n = t.vectorContext,
				s = t.frameState,
				a = s.extent,
				h = s.viewState,
				l = h.center,
				t = h.projection,
				h = h.resolution,
				s = s.pixelRatio,
				s = h * h / (4 * s * s);
			for (this.projection_ && Xe(this.projection_, t) || this.updateProjectionInfo_(t), this
				.createGraticule_(a, l, h, s), n.setFillStrokeStyle(null, this.strokeStyle_), e = 0, i =
				this.meridians_.length; e < i; ++e) r = this.meridians_[e], n.drawGeometry(r);
			for (e = 0, i = this.parallels_.length; e < i; ++e) r = this.parallels_[e], n.drawGeometry(
				r);
			if (this.meridiansLabels_)
				for (e = 0, i = this.meridiansLabels_.length; e < i; ++e) o = this.meridiansLabels_[e],
					this.lonLabelStyle_.setText(o.text), n.setTextStyle(this.lonLabelStyle_), n
					.drawGeometry(o.geom);
			if (this.parallelsLabels_)
				for (e = 0, i = this.parallelsLabels_.length; e < i; ++e) o = this.parallelsLabels_[e],
					this.latLabelStyle_.setText(o.text), n.setTextStyle(this.latLabelStyle_), n
					.drawGeometry(o.geom)
		}, go.prototype.updateProjectionInfo_ = function(t) {
			var e = ke("EPSG:4326"),
				i = t.getWorldExtent(),
				r = He(i, e, t);
			this.maxLat_ = i[3], this.maxLon_ = i[2], this.minLat_ = i[1], this.minLon_ = i[0], this
				.maxLatP_ = r[3], this.maxLonP_ = r[2], this.minLatP_ = r[1], this.minLonP_ = r[0], this
				.fromLonLatTransform_ = We(e, t), this.toLonLatTransform_ = We(t, e), this
				.projectionCenterLonLat_ = this.toLonLatTransform_(Gt(t.getExtent())), this
				.projection_ = t
		}, go.prototype.setMap = function(t) {
			this.map_ && (S(this.postcomposeListenerKey_), this.postcomposeListenerKey_ = null, this
				.map_.render()), t && (this.postcomposeListenerKey_ = E(t, Hr, this
				.handlePostCompose_, this), t.render()), this.map_ = t
		};
		var yo = go,
			mo = function(t, e, i) {
				this.decay_ = t, this.minVelocity_ = e, this.delay_ = i, this.points_ = [], this.angle_ = 0,
					this.initialVelocity_ = 0
			};
		mo.prototype.begin = function() {
			this.points_.length = 0, this.angle_ = 0, this.initialVelocity_ = 0
		}, mo.prototype.update = function(t, e) {
			this.points_.push(t, e, Date.now())
		}, mo.prototype.end = function() {
			if (this.points_.length < 6) return !1;
			var t = Date.now() - this.delay_,
				e = this.points_.length - 3;
			if (this.points_[2 + e] < t) return !1;
			for (var i = e - 3; 0 < i && this.points_[i + 2] > t;) i -= 3;
			var r = this.points_[2 + e] - this.points_[i + 2];
			if (r < 1e3 / 60) return !1;
			var o = this.points_[e] - this.points_[i],
				e = this.points_[1 + e] - this.points_[i + 1];
			return this.angle_ = Math.atan2(e, o), this.initialVelocity_ = Math.sqrt(o * o + e * e) / r,
				this.initialVelocity_ > this.minVelocity_
		}, mo.prototype.getDistance = function() {
			return (this.minVelocity_ - this.initialVelocity_) / this.decay_
		}, mo.prototype.getAngle = function() {
			return this.angle_
		};
		var vo, xo, Eo, So = mo,
			Co = ((Eo = F) && (ko.__proto__ = Eo), (ko.prototype = Object.create(Eo && Eo.prototype))
				.constructor = ko),
			wo = ((xo = Co) && (Do.__proto__ = xo), ((Do.prototype = Object.create(xo && xo.prototype))
				.constructor = Do).prototype.preventDefault = function() {
				xo.prototype.preventDefault.call(this), this.originalEvent.preventDefault()
			}, Do.prototype.stopPropagation = function() {
				xo.prototype.stopPropagation.call(this), this.originalEvent.stopPropagation()
			}, Do),
			To = {
				SINGLECLICK: "singleclick",
				CLICK: A.CLICK,
				DBLCLICK: A.DBLCLICK,
				POINTERDRAG: "pointerdrag",
				POINTERMOVE: "pointermove",
				POINTERDOWN: "pointerdown",
				POINTERUP: "pointerup",
				POINTEROVER: "pointerover",
				POINTEROUT: "pointerout",
				POINTERENTER: "pointerenter",
				POINTERLEAVE: "pointerleave",
				POINTERCANCEL: "pointercancel"
			},
			Ro = ((vo = wo) && (Go.__proto__ = vo), (Go.prototype = Object.create(vo && vo.prototype))
				.constructor = Go),
			Io = "pointermove",
			Lo = "pointerdown",
			bo = "pointerup",
			Po = "pointerover",
			Mo = "pointerout",
			Fo = "pointerenter",
			Oo = "pointerleave",
			Ao = "pointercancel",
			No = function(t, e) {
				this.dispatcher = t, this.mapping_ = e
			};

		function Go(t, e, i, r, o) {
			vo.call(this, t, e, i.originalEvent, r, o), this.pointerEvent = i
		}

		function Do(t, e, i, r, o) {
			xo.call(this, t, e, o), this.originalEvent = i, this.pixel = e.getEventPixel(i), this
				.coordinate = e.getCoordinateFromPixel(this.pixel), this.dragging = void 0 !== r && r
		}

		function ko(t, e, i) {
			Eo.call(this, t), this.map = e, this.frameState = void 0 !== i ? i : null
		}
		No.prototype.getEvents = function() {
			return Object.keys(this.mapping_)
		}, No.prototype.getHandlerForEvent = function(t) {
			return this.mapping_[t]
		};
		var jo = No,
			Uo = 1,
			Yo = "mouse";

		function Bo(t) {
			var e;
			this.isEventSimulatedFromTouch_(t) || (Uo.toString() in this.pointerMap && this.cancel(t), e =
				Ko(t, this.dispatcher), this.pointerMap[Uo.toString()] = t, this.dispatcher.down(e, t))
		}

		function zo(t) {
			var e;
			this.isEventSimulatedFromTouch_(t) || (e = Ko(t, this.dispatcher), this.dispatcher.move(e, t))
		}

		function Xo(t) {
			var e;
			this.isEventSimulatedFromTouch_(t) || (e = this.pointerMap[Uo.toString()]) && e.button === t
				.button && (e = Ko(t, this.dispatcher), this.dispatcher.up(e, t), this.cleanupMouse())
		}

		function Vo(t) {
			var e;
			this.isEventSimulatedFromTouch_(t) || (e = Ko(t, this.dispatcher), this.dispatcher.enterOver(e,
				t))
		}

		function Wo(t) {
			var e;
			this.isEventSimulatedFromTouch_(t) || (e = Ko(t, this.dispatcher), this.dispatcher.leaveOut(e,
				t))
		}

		function Ko(t, e) {
			var e = e.cloneEvent(t, t),
				i = e.preventDefault;
			return e.preventDefault = function() {
				t.preventDefault(), i()
			}, e.pointerId = Uo, e.isPrimary = !0, e.pointerType = Yo, e
		}
		var Ho, Zo = ((Ho = jo) && (Jo.__proto__ = Ho), ((Jo.prototype = Object.create(Ho && Ho.prototype))
				.constructor = Jo).prototype.isEventSimulatedFromTouch_ = function(t) {
				for (var e = this.lastTouches, i = t.clientX, r = t.clientY, o = 0, n = e.length, s =
						void 0; o < n && (s = e[o]); o++) {
					var a = Math.abs(i - s[0]),
						h = Math.abs(r - s[1]);
					if (a <= 25 && h <= 25) return !0
				}
				return !1
			}, Jo.prototype.cancel = function(t) {
				var e = Ko(t, this.dispatcher);
				this.dispatcher.cancel(e, t), this.cleanupMouse()
			}, Jo.prototype.cleanupMouse = function() {
				delete this.pointerMap[Uo.toString()]
			}, Jo),
			qo = ["", "unavailable", "touch", "pen", "mouse"];

		function Jo(t) {
			var e = {
				mousedown: Bo,
				mousemove: zo,
				mouseup: Xo,
				mouseover: Vo,
				mouseout: Wo
			};
			Ho.call(this, t, e), this.pointerMap = t.pointerMap, this.lastTouches = []
		}

		function Qo(t) {
			this.pointerMap[t.pointerId.toString()] = t;
			var e = this.prepareEvent_(t);
			this.dispatcher.down(e, t)
		}

		function $o(t) {
			var e = this.prepareEvent_(t);
			this.dispatcher.move(e, t)
		}

		function tn(t) {
			var e = this.prepareEvent_(t);
			this.dispatcher.up(e, t), this.cleanup(t.pointerId)
		}

		function en(t) {
			var e = this.prepareEvent_(t);
			this.dispatcher.leaveOut(e, t)
		}

		function rn(t) {
			var e = this.prepareEvent_(t);
			this.dispatcher.enterOver(e, t)
		}

		function on(t) {
			var e = this.prepareEvent_(t);
			this.dispatcher.cancel(e, t), this.cleanup(t.pointerId)
		}

		function nn(t) {
			t = this.dispatcher.makeEvent("lostpointercapture", t, t);
			this.dispatcher.dispatchEvent(t)
		}

		function sn(t) {
			t = this.dispatcher.makeEvent("gotpointercapture", t, t);
			this.dispatcher.dispatchEvent(t)
		}
		var an, hn = ((an = jo) && (ln.__proto__ = an), ((ln.prototype = Object.create(an && an.prototype))
			.constructor = ln).prototype.prepareEvent_ = function(t) {
			var e = t;
			return "number" == typeof t.pointerType && ((e = this.dispatcher.cloneEvent(t, t))
				.pointerType = qo[t.pointerType]), e
		}, ln.prototype.cleanup = function(t) {
			delete this.pointerMap[t.toString()]
		}, ln);

		function ln(t) {
			var e = {
				MSPointerDown: Qo,
				MSPointerMove: $o,
				MSPointerUp: tn,
				MSPointerOut: en,
				MSPointerOver: rn,
				MSPointerCancel: on,
				MSGotPointerCapture: sn,
				MSLostPointerCapture: nn
			};
			an.call(this, t, e), this.pointerMap = t.pointerMap
		}

		function un(t) {
			this.dispatcher.fireNativeEvent(t)
		}

		function pn(t) {
			this.dispatcher.fireNativeEvent(t)
		}

		function cn(t) {
			this.dispatcher.fireNativeEvent(t)
		}

		function dn(t) {
			this.dispatcher.fireNativeEvent(t)
		}

		function _n(t) {
			this.dispatcher.fireNativeEvent(t)
		}

		function fn(t) {
			this.dispatcher.fireNativeEvent(t)
		}

		function gn(t) {
			this.dispatcher.fireNativeEvent(t)
		}

		function yn(t) {
			this.dispatcher.fireNativeEvent(t)
		}
		var mn, vn, xn = ((vn = jo) && (wn.__proto__ = vn), (wn.prototype = Object.create(vn && vn
				.prototype)).constructor = wn),
			En = !1,
			Sn = ((mn = F) && (Cn.__proto__ = mn), (Cn.prototype = Object.create(mn && mn.prototype))
				.constructor = Cn);

		function Cn(t, e, i) {
			mn.call(this, t), this.originalEvent = e;
			var r = i || {};
			this.buttons = function() {
					var t;
					if (r.buttons || En) t = r.buttons;
					else switch (r.which) {
						case 1:
							t = 1;
							break;
						case 2:
							t = 4;
							break;
						case 3:
							t = 2;
							break;
						default:
							t = 0
					}
					return t
				}(), this.pressure = (t = r, i = this.buttons, t.pressure || (i ? .5 : 0)), this.bubbles =
				"bubbles" in r && r.bubbles, this.cancelable = "cancelable" in r && r.cancelable, this
				.view = "view" in r ? r.view : null, this.detail = "detail" in r ? r.detail : null, this
				.screenX = "screenX" in r ? r.screenX : 0, this.screenY = "screenY" in r ? r.screenY : 0,
				this.clientX = "clientX" in r ? r.clientX : 0, this.clientY = "clientY" in r ? r.clientY :
				0, this.ctrlKey = "ctrlKey" in r && r.ctrlKey, this.altKey = "altKey" in r && r.altKey, this
				.shiftKey = "shiftKey" in r && r.shiftKey, this.metaKey = "metaKey" in r && r.metaKey, this
				.button = "button" in r ? r.button : 0, this.relatedTarget = "relatedTarget" in r ? r
				.relatedTarget : null, this.pointerId = "pointerId" in r ? r.pointerId : 0, this.width =
				"width" in r ? r.width : 0, this.height = "height" in r ? r.height : 0, this.tiltX =
				"tiltX" in r ? r.tiltX : 0, this.tiltY = "tiltY" in r ? r.tiltY : 0, this.pointerType =
				"pointerType" in r ? r.pointerType : "", this.hwTimestamp = "hwTimestamp" in r ? r
				.hwTimestamp : 0, this.isPrimary = "isPrimary" in r && r.isPrimary, e.preventDefault && (
					this.preventDefault = function() {
						e.preventDefault()
					})
		}

		function wn(t) {
			var e = {
				pointerdown: un,
				pointermove: pn,
				pointerup: cn,
				pointerout: dn,
				pointerover: _n,
				pointercancel: fn,
				gotpointercapture: yn,
				lostpointercapture: gn
			};
			vn.call(this, t, e)
		}! function() {
			try {
				var t = new MouseEvent("click", {
					buttons: 1
				});
				En = 1 === t.buttons
			} catch (t) {}
		}();
		var Tn = Sn;

		function Rn(t) {
			this.vacuumTouches_(t), this.setPrimaryTouch_(t.changedTouches[0]), this.dedupSynthMouse_(t),
				this.clickCount_++, this.processTouches_(t, this.overDown_)
		}

		function In(t) {
			this.processTouches_(t, this.moveOverOut_)
		}

		function Ln(t) {
			this.dedupSynthMouse_(t), this.processTouches_(t, this.upOut_)
		}

		function bn(t) {
			this.processTouches_(t, this.cancelOut_)
		}
		var Pn, Mn, Fn, On = ((Fn = jo) && (Wn.__proto__ = Fn), ((Wn.prototype = Object.create(Fn && Fn
				.prototype)).constructor = Wn).prototype.isPrimaryTouch_ = function(t) {
				return this.firstTouchId_ === t.identifier
			}, Wn.prototype.setPrimaryTouch_ = function(t) {
				var e = Object.keys(this.pointerMap).length;
				(0 === e || 1 === e && Uo.toString() in this.pointerMap) && (this.firstTouchId_ = t
					.identifier, this.cancelResetClickCount_())
			}, Wn.prototype.removePrimaryPointer_ = function(t) {
				t.isPrimary && (this.firstTouchId_ = void 0, this.resetClickCount_())
			}, Wn.prototype.resetClickCount_ = function() {
				this.resetId_ = setTimeout(this.resetClickCountHandler_.bind(this), 200)
			}, Wn.prototype.resetClickCountHandler_ = function() {
				this.clickCount_ = 0, this.resetId_ = void 0
			}, Wn.prototype.cancelResetClickCount_ = function() {
				void 0 !== this.resetId_ && clearTimeout(this.resetId_)
			}, Wn.prototype.touchToPointer_ = function(t, e) {
				t = this.dispatcher.cloneEvent(t, e);
				return t.pointerId = e.identifier + 2, t.bubbles = !0, t.cancelable = !0, t.detail =
					this.clickCount_, t.button = 0, t.buttons = 1, t.width = e.radiusX || 0, t.height =
					e.radiusY || 0, t.pressure = e.force || .5, t.isPrimary = this.isPrimaryTouch_(e), t
					.pointerType = "touch", t.clientX = e.clientX, t.clientY = e.clientY, t.screenX = e
					.screenX, t.screenY = e.screenY, t
			}, Wn.prototype.processTouches_ = function(t, e) {
				var i = Array.prototype.slice.call(t.changedTouches),
					r = i.length;

				function o() {
					t.preventDefault()
				}
				for (var n = 0; n < r; ++n) {
					var s = this.touchToPointer_(t, i[n]);
					s.preventDefault = o, e.call(this, t, s)
				}
			}, Wn.prototype.findTouch_ = function(t, e) {
				for (var i = t.length, r = 0; r < i; r++)
					if (t[r].identifier === e) return !0;
				return !1
			}, Wn.prototype.vacuumTouches_ = function(t) {
				var e = t.touches,
					i = Object.keys(this.pointerMap),
					r = i.length;
				if (r >= e.length) {
					for (var o = [], n = 0; n < r; ++n) {
						var s = Number(i[n]),
							a = this.pointerMap[s];
						s == Uo || this.findTouch_(e, s - 2) || o.push(a.out)
					}
					for (var h = 0; h < o.length; ++h) this.cancelOut_(t, o[h])
				}
			}, Wn.prototype.overDown_ = function(t, e) {
				this.pointerMap[e.pointerId] = {
					target: e.target,
					out: e,
					outTarget: e.target
				}, this.dispatcher.over(e, t), this.dispatcher.enter(e, t), this.dispatcher.down(e,
					t)
			}, Wn.prototype.moveOverOut_ = function(t, e) {
				var i, r = e,
					o = this.pointerMap[r.pointerId];
				o && (i = o.out, e = o.outTarget, this.dispatcher.move(r, t), i && e !== r.target && (i
						.relatedTarget = r.target, r.relatedTarget = e, i.target = e, r.target ? (
							this.dispatcher.leaveOut(i, t), this.dispatcher.enterOver(r, t)) : (r
							.target = e, r.relatedTarget = null, this.cancelOut_(t, r))), o.out = r,
					o.outTarget = r.target)
			}, Wn.prototype.upOut_ = function(t, e) {
				this.dispatcher.up(e, t), this.dispatcher.out(e, t), this.dispatcher.leave(e, t), this
					.cleanUpPointer_(e)
			}, Wn.prototype.cancelOut_ = function(t, e) {
				this.dispatcher.cancel(e, t), this.dispatcher.out(e, t), this.dispatcher.leave(e, t),
					this.cleanUpPointer_(e)
			}, Wn.prototype.cleanUpPointer_ = function(t) {
				delete this.pointerMap[t.pointerId], this.removePrimaryPointer_(t)
			}, Wn.prototype.dedupSynthMouse_ = function(t) {
				var i, r = this.mouseSource.lastTouches,
					t = t.changedTouches[0];
				this.isPrimaryTouch_(t) && (i = [t.clientX, t.clientY], r.push(i), setTimeout(
			function() {
					var t, e; - 1 < (e = (t = r).indexOf(i)) && t.splice(e, 1)
				}, this.dedupTimeout_))
			}, Wn),
			An = [
				["bubbles", !1],
				["cancelable", !1],
				["view", null],
				["detail", null],
				["screenX", 0],
				["screenY", 0],
				["clientX", 0],
				["clientY", 0],
				["ctrlKey", !1],
				["altKey", !1],
				["shiftKey", !1],
				["metaKey", !1],
				["button", 0],
				["relatedTarget", null],
				["buttons", 0],
				["pointerId", 0],
				["width", 0],
				["height", 0],
				["pressure", 0],
				["tiltX", 0],
				["tiltY", 0],
				["pointerType", ""],
				["hwTimestamp", 0],
				["isPrimary", !1],
				["type", ""],
				["target", null],
				["currentTarget", null],
				["which", 0]
			],
			Nn = ((Mn = O) && (Vn.__proto__ = Mn), ((Vn.prototype = Object.create(Mn && Mn.prototype))
				.constructor = Vn).prototype.registerSources = function() {
				var t;
				cr ? this.registerSource("native", new xn(this)) : dr ? this.registerSource("ms",
					new hn(this)) : (t = new Zo(this), this.registerSource("mouse", t), pr && this
					.registerSource("touch", new On(this, t))), this.register_()
			}, Vn.prototype.registerSource = function(t, e) {
				var i = e,
					e = i.getEvents();
				e && (e.forEach(function(t) {
					var e = i.getHandlerForEvent(t);
					e && (this.eventMap_[t] = e.bind(i))
				}.bind(this)), this.eventSourceList_.push(i))
			}, Vn.prototype.register_ = function() {
				for (var t = this.eventSourceList_.length, e = 0; e < t; e++) {
					var i = this.eventSourceList_[e];
					this.addEvents_(i.getEvents())
				}
			}, Vn.prototype.unregister_ = function() {
				for (var t = this.eventSourceList_.length, e = 0; e < t; e++) {
					var i = this.eventSourceList_[e];
					this.removeEvents_(i.getEvents())
				}
			}, Vn.prototype.eventHandler_ = function(t) {
				var e = t.type,
					e = this.eventMap_[e];
				e && e(t)
			}, Vn.prototype.addEvents_ = function(t) {
				t.forEach(function(t) {
					E(this.element_, t, this.eventHandler_, this)
				}.bind(this))
			}, Vn.prototype.removeEvents_ = function(t) {
				t.forEach(function(t) {
					x(this.element_, t, this.eventHandler_, this)
				}.bind(this))
			}, Vn.prototype.cloneEvent = function(t, e) {
				for (var i = {}, r = 0, o = An.length; r < o; r++) {
					var n = An[r][0];
					i[n] = t[n] || e[n] || An[r][1]
				}
				return i
			}, Vn.prototype.down = function(t, e) {
				this.fireEvent(Lo, t, e)
			}, Vn.prototype.move = function(t, e) {
				this.fireEvent(Io, t, e)
			}, Vn.prototype.up = function(t, e) {
				this.fireEvent(bo, t, e)
			}, Vn.prototype.enter = function(t, e) {
				t.bubbles = !1, this.fireEvent(Fo, t, e)
			}, Vn.prototype.leave = function(t, e) {
				t.bubbles = !1, this.fireEvent(Oo, t, e)
			}, Vn.prototype.over = function(t, e) {
				t.bubbles = !0, this.fireEvent(Po, t, e)
			}, Vn.prototype.out = function(t, e) {
				t.bubbles = !0, this.fireEvent(Mo, t, e)
			}, Vn.prototype.cancel = function(t, e) {
				this.fireEvent(Ao, t, e)
			}, Vn.prototype.leaveOut = function(t, e) {
				this.out(t, e), this.contains_(t.target, t.relatedTarget) || this.leave(t, e)
			}, Vn.prototype.enterOver = function(t, e) {
				this.over(t, e), this.contains_(t.target, t.relatedTarget) || this.enter(t, e)
			}, Vn.prototype.contains_ = function(t, e) {
				return !(!t || !e) && t.contains(e)
			}, Vn.prototype.makeEvent = function(t, e, i) {
				return new Tn(t, i, e)
			}, Vn.prototype.fireEvent = function(t, e, i) {
				i = this.makeEvent(t, e, i);
				this.dispatchEvent(i)
			}, Vn.prototype.fireNativeEvent = function(t) {
				t = this.makeEvent(t.type, t, t);
				this.dispatchEvent(t)
			}, Vn.prototype.wrapMouseEvent = function(t, e) {
				return this.makeEvent(t, Ko(e, this), e)
			}, Vn.prototype.disposeInternal = function() {
				this.unregister_(), Mn.prototype.disposeInternal.call(this)
			}, Vn),
			Gn = ((Pn = O) && (Xn.__proto__ = Pn), ((Xn.prototype = Object.create(Pn && Pn.prototype))
				.constructor = Xn).prototype.emulateClick_ = function(e) {
				var t = new Ro(To.CLICK, this.map_, e);
				this.dispatchEvent(t), void 0 !== this.clickTimeoutId_ ? (clearTimeout(this
					.clickTimeoutId_), this.clickTimeoutId_ = void 0, t = new Ro(To.DBLCLICK,
					this.map_, e), this.dispatchEvent(t)) : this.clickTimeoutId_ = setTimeout(
					function() {
						this.clickTimeoutId_ = void 0;
						var t = new Ro(To.SINGLECLICK, this.map_, e);
						this.dispatchEvent(t)
					}.bind(this), 250)
			}, Xn.prototype.updateActivePointers_ = function(t) {
				t.type == To.POINTERUP || t.type == To.POINTERCANCEL ? delete this.trackedTouches_[t
					.pointerId] : t.type == To.POINTERDOWN && (this.trackedTouches_[t.pointerId] = !
					0), this.activePointers_ = Object.keys(this.trackedTouches_).length
			}, Xn.prototype.handlePointerUp_ = function(t) {
				this.updateActivePointers_(t);
				var e = new Ro(To.POINTERUP, this.map_, t);
				this.dispatchEvent(e), e.propagationStopped || this.dragging_ || !this
					.isMouseActionButton_(t) || this.emulateClick_(this.down_), 0 === this
					.activePointers_ && (this.dragListenerKeys_.forEach(S), this.dragListenerKeys_
						.length = 0, this.dragging_ = !1, this.down_ = null, this
						.documentPointerEventHandler_.dispose(), this.documentPointerEventHandler_ =
						null)
			}, Xn.prototype.isMouseActionButton_ = function(t) {
				return 0 === t.button
			}, Xn.prototype.handlePointerDown_ = function(t) {
				this.updateActivePointers_(t);
				var e = new Ro(To.POINTERDOWN, this.map_, t);
				this.dispatchEvent(e), this.down_ = t, 0 === this.dragListenerKeys_.length && (this
					.documentPointerEventHandler_ = new Nn(document), this.dragListenerKeys_.push(E(
						this.documentPointerEventHandler_, To.POINTERMOVE, this
						.handlePointerMove_, this), E(this.documentPointerEventHandler_, To
						.POINTERUP, this.handlePointerUp_, this), E(this.pointerEventHandler_,
						To.POINTERCANCEL, this.handlePointerUp_, this)))
			}, Xn.prototype.handlePointerMove_ = function(t) {
				var e;
				this.isMoving_(t) && (this.dragging_ = !0, e = new Ro(To.POINTERDRAG, this.map_, t, this
					.dragging_), this.dispatchEvent(e)), t.preventDefault()
			}, Xn.prototype.relayEvent_ = function(t) {
				var e = !(!this.down_ || !this.isMoving_(t));
				this.dispatchEvent(new Ro(t.type, this.map_, t, e))
			}, Xn.prototype.isMoving_ = function(t) {
				return this.dragging_ || Math.abs(t.clientX - this.down_.clientX) > this
					.moveTolerance_ || Math.abs(t.clientY - this.down_.clientY) > this.moveTolerance_
			}, Xn.prototype.disposeInternal = function() {
				this.relayedListenerKey_ && (S(this.relayedListenerKey_), this.relayedListenerKey_ =
						null), this.pointerdownListenerKey_ && (S(this.pointerdownListenerKey_), this
						.pointerdownListenerKey_ = null), this.dragListenerKeys_.forEach(S), this
					.dragListenerKeys_.length = 0, this.documentPointerEventHandler_ && (this
						.documentPointerEventHandler_.dispose(), this.documentPointerEventHandler_ =
						null), this.pointerEventHandler_ && (this.pointerEventHandler_.dispose(), this
						.pointerEventHandler_ = null), Pn.prototype.disposeInternal.call(this)
			}, Xn),
			Dn = "postrender",
			kn = "layergroup",
			jn = "size",
			Un = "target",
			Yn = "view",
			Bn = {
				IDLE: 0,
				LOADING: 1,
				LOADED: 2,
				ERROR: 3,
				EMPTY: 4,
				ABORT: 5
			},
			zn = function(t, e) {
				this.priorityFunction_ = t, this.keyFunction_ = e, this.elements_ = [], this
				.priorities_ = [], this.queuedElements_ = {}
			};

		function Xn(t, e) {
			Pn.call(this), this.map_ = t, this.clickTimeoutId_, this.dragging_ = !1, this
				.dragListenerKeys_ = [], this.moveTolerance_ = e ? e * hr : hr, this.down_ = null;
			e = this.map_.getViewport();
			this.activePointers_ = 0, this.trackedTouches_ = {}, this.pointerEventHandler_ = new Nn(e), this
				.documentPointerEventHandler_ = null, this.pointerdownListenerKey_ = E(this
					.pointerEventHandler_, Lo, this.handlePointerDown_, this), this.relayedListenerKey_ = E(
					this.pointerEventHandler_, Io, this.relayEvent_, this)
		}

		function Vn(t) {
			Mn.call(this), this.element_ = t, this.pointerMap = {}, this.eventMap_ = {}, this
				.eventSourceList_ = [], this.registerSources()
		}

		function Wn(t, e) {
			var i = {
				touchstart: Rn,
				touchmove: In,
				touchend: Ln,
				touchcancel: bn
			};
			Fn.call(this, t, i), this.pointerMap = t.pointerMap, this.mouseSource = e, this.firstTouchId_ =
				void 0, this.clickCount_ = 0, this.resetId_, this.dedupTimeout_ = 2500
		}
		zn.prototype.clear = function() {
			this.elements_.length = 0, this.priorities_.length = 0, _(this.queuedElements_)
		}, zn.prototype.dequeue = function() {
			var t = this.elements_,
				e = this.priorities_,
				i = t[0];
			1 == t.length ? (t.length = 0, e.length = 0) : (t[0] = t.pop(), e[0] = e.pop(), this
				.siftUp_(0));
			e = this.keyFunction_(i);
			return delete this.queuedElements_[e], i
		}, zn.prototype.enqueue = function(t) {
			$(!(this.keyFunction_(t) in this.queuedElements_), 31);
			var e = this.priorityFunction_(t);
			return e != 1 / 0 && (this.elements_.push(t), this.priorities_.push(e), this
				.queuedElements_[this.keyFunction_(t)] = !0, this.siftDown_(0, this.elements_
					.length - 1), !0)
		}, zn.prototype.getCount = function() {
			return this.elements_.length
		}, zn.prototype.getLeftChildIndex_ = function(t) {
			return 2 * t + 1
		}, zn.prototype.getRightChildIndex_ = function(t) {
			return 2 * t + 2
		}, zn.prototype.getParentIndex_ = function(t) {
			return t - 1 >> 1
		}, zn.prototype.heapify_ = function() {
			for (var t = (this.elements_.length >> 1) - 1; 0 <= t; t--) this.siftUp_(t)
		}, zn.prototype.isEmpty = function() {
			return 0 === this.elements_.length
		}, zn.prototype.isKeyQueued = function(t) {
			return t in this.queuedElements_
		}, zn.prototype.isQueued = function(t) {
			return this.isKeyQueued(this.keyFunction_(t))
		}, zn.prototype.siftUp_ = function(t) {
			for (var e = this.elements_, i = this.priorities_, r = e.length, o = e[t], n = i[t], s =
				t; t < r >> 1;) {
				var a = this.getLeftChildIndex_(t),
					h = this.getRightChildIndex_(t),
					a = h < r && i[h] < i[a] ? h : a;
				e[t] = e[a], i[t] = i[a], t = a
			}
			e[t] = o, i[t] = n, this.siftDown_(s, t)
		}, zn.prototype.siftDown_ = function(t, e) {
			for (var i = this.elements_, r = this.priorities_, o = i[e], n = r[e]; t < e;) {
				var s = this.getParentIndex_(e);
				if (!(r[s] > n)) break;
				i[e] = i[s], r[e] = r[s], e = s
			}
			i[e] = o, r[e] = n
		}, zn.prototype.reprioritize = function() {
			for (var t, e, i = this.priorityFunction_, r = this.elements_, o = this.priorities_, n = 0,
					s = r.length, a = 0; a < s; ++a)(e = i(t = r[a])) == 1 / 0 ? delete this
				.queuedElements_[this.keyFunction_(t)] : (o[n] = e, r[n++] = t);
			r.length = n, o.length = n, this.heapify_()
		};
		var Kn, Hn = zn,
			Zn = ((Kn = Hn) && (Qn.__proto__ = Kn), ((Qn.prototype = Object.create(Kn && Kn.prototype))
				.constructor = Qn).prototype.enqueue = function(t) {
				var e = Kn.prototype.enqueue.call(this, t);
				return e && E(t[0], A.CHANGE, this.handleTileChange, this), e
			}, Qn.prototype.getTilesLoading = function() {
				return this.tilesLoading_
			}, Qn.prototype.handleTileChange = function(t) {
				var e = t.target,
					t = e.getState();
				t !== Bn.LOADED && t !== Bn.ERROR && t !== Bn.EMPTY && t !== Bn.ABORT || (x(e, A.CHANGE,
						this.handleTileChange, this), (e = e.getKey()) in this.tilesLoadingKeys_ &&
					(delete this.tilesLoadingKeys_[e], --this.tilesLoading_), this
					.tileChangeCallback_())
			}, Qn.prototype.loadMoreTiles = function(t, e) {
				for (var i, r, o, n = 0, s = !1; this.tilesLoading_ < t && n < e && 0 < this
				.getCount();) o = (r = this.dequeue()[0]).getKey(), (i = r.getState()) === Bn.ABORT ?
					s = !0 : i !== Bn.IDLE || o in this.tilesLoadingKeys_ || (this.tilesLoadingKeys_[
						o] = !0, ++this.tilesLoading_, ++n, r.load());
				0 === n && s && this.tileChangeCallback_()
			}, Qn),
			qn = 42,
			Jn = 256;

		function Qn(e, t) {
			Kn.call(this, function(t) {
				return e.apply(null, t)
			}, function(t) {
				return t[0].getKey()
			}), this.tileChangeCallback_ = t, this.tilesLoading_ = 0, this.tilesLoadingKeys_ = {}
		}

		function $n(t) {
			return t
		}

		function ts(t, e) {
			return void 0 !== t ? 0 : void 0
		}

		function es(t, e) {
			return void 0 !== t ? t + e : void 0
		}
		var is = "center",
			rs = "resolution",
			os = "rotation";

		function ns(t) {
			return Math.pow(t, 3)
		}

		function ss(t) {
			return 1 - ns(1 - t)
		}

		function as(t) {
			return 3 * t * t - 2 * t * t * t
		}

		function hs(t) {
			return t
		}

		function ls(t, e) {
			setTimeout(function() {
				t(e)
			}, 0)
		}
		var us, ps = ((us = K) && (cs.__proto__ = us), ((cs.prototype = Object.create(us && us.prototype))
			.constructor = cs).prototype.applyOptions_ = function(e) {
			var t = {};
			t[is] = void 0 !== e.center ? e.center : null;
			var i, r, o, n, s, a, h, l, u, p = (d = void 0 !== (i = e).minZoom ? i.minZoom : 0, u =
				void 0 !== i.maxZoom ? i.maxZoom : 28, _ = void 0 !== i.zoomFactor ? i
				.zoomFactor : 2, {
					constraint: u = void 0 !== i.resolutions ? (r = (o = i.resolutions)[d], p =
						void 0 !== o[u] ? o[u] : o[o.length - 1], l = o,
						function(t, e, i) {
							if (void 0 !== t) {
								t = Jt((t = nt(l, t, i)) + e, 0, l.length - 1), i = Math
									.floor(t);
								if (t != i && i < l.length - 1) {
									e = l[i] / l[i + 1];
									return l[i] / Math.pow(e, t - i)
								}
								return l[i]
							}
						}) : (n = (o = ((o = (n = Ye(i.projection, "EPSG:3857"))
						.getExtent()) ? Math.max(Bt(o), kt(o)) : 360 * ue[pe
							.DEGREES] / n.getMetersPerUnit()) / Jn / Math.pow(2, 0)) / Math
						.pow(2, 28), void 0 !== (r = i.maxResolution) ? d = 0 : r = o / Math
						.pow(_, d), void 0 === (p = i.minResolution) && (p = void 0 !== i
							.maxZoom ? void 0 !== i.maxResolution ? r / Math.pow(_, u) : o /
							Math.pow(_, u) : n), u = d + Math.floor(Math.log(r / p) / Math
							.log(_)), p = r / Math.pow(_, u - d), s = _, a = r, h = u - d,
						function(t, e, i) {
							if (void 0 !== t) {
								i = -i / 2 + .5, i = Math.floor(Math.log(a / t) / Math.log(
									s) + i), e = Math.max(i + e, 0), e = Math.min(e, h);
								return a / Math.pow(s, e)
							}
						}),
					maxResolution: r,
					minResolution: p,
					minZoom: d,
					zoomFactor: _
				});
			this.maxResolution_ = p.maxResolution, this.minResolution_ = p.minResolution, this
				.zoomFactor_ = p.zoomFactor, this.resolutions_ = e.resolutions, this.minZoom_ = p
				.minZoom;
			var c, d = void 0 !== e.extent ? (c = e.extent, function(t) {
					return t ? [Jt(t[0], c[0], c[2]), Jt(t[1], c[1], c[3])] : void 0
				}) : $n,
				_ = p.constraint,
				p = function() {
					if (void 0 === e.enableRotation || e.enableRotation) {
						var t = e.constrainRotation;
						return void 0 === t || !0 === t ? (r = ie(5), function(t, e) {
							return void 0 !== t ? Math.abs(t + e) <= r ? 0 : t + e : void 0
						}) : !1 !== t && "number" == typeof t ? (i = 2 * Math.PI / t, function(
							t, e) {
							return void 0 !== t ? t = Math.floor((t + e) / i + .5) * i :
								void 0
						}) : es
					}
					var i, r;
					return ts
				}();
			this.constraints_ = {
					center: d,
					resolution: _,
					rotation: p
				}, void 0 !== e.resolution ? t[rs] = e.resolution : void 0 !== e.zoom && (t[rs] =
					this.constrainResolution(this.maxResolution_, e.zoom - this.minZoom_), this
					.resolutions_ && (t[rs] = Jt(Number(this.getResolution() || t[rs]), this
						.minResolution_, this.maxResolution_))), t[os] = void 0 !== e.rotation ? e
				.rotation : 0, this.setProperties(t), this.options_ = e
		}, cs.prototype.getUpdatedOptions_ = function(t) {
			var e = y({}, this.options_);
			return void 0 !== e.resolution ? e.resolution = this.getResolution() : e.zoom = this
				.getZoom(), e.center = this.getCenter(), e.rotation = this.getRotation(), y({}, e,
					t)
		}, cs.prototype.animate = function(t) {
			var e, i = arguments,
				r = arguments.length;
			if (1 < r && "function" == typeof arguments[r - 1] && (e = arguments[r - 1], --r), !this
				.isDef()) {
				var o = arguments[r - 1];
				return o.center && this.setCenter(o.center), void 0 !== o.zoom && this.setZoom(o
					.zoom), void 0 !== o.rotation && this.setRotation(o.rotation), void(e && ls(
					e, !0))
			}
			for (var n = Date.now(), s = this.getCenter().slice(), a = this.getResolution(), h =
					this.getRotation(), l = [], u = 0; u < r; ++u) {
				var p, c = i[u],
					d = {
						start: n,
						complete: !1,
						anchor: c.anchor,
						duration: void 0 !== c.duration ? c.duration : 1e3,
						easing: c.easing || as
					};
				c.center && (d.sourceCenter = s, d.targetCenter = c.center, s = d.targetCenter),
					void 0 !== c.zoom ? (d.sourceResolution = a, d.targetResolution = this
						.constrainResolution(this.maxResolution_, c.zoom - this.minZoom_, 0), a = d
						.targetResolution) : c.resolution && (d.sourceResolution = a, d
						.targetResolution = c.resolution, a = d.targetResolution), void 0 !== c
					.rotation && (d.sourceRotation = h, p = re(c.rotation - h + Math.PI, 2 * Math
						.PI) - Math.PI, d.targetRotation = h + p, h = d.targetRotation), d
					.callback = e, (p = d).sourceCenter && p.targetCenter && !Ar(p.sourceCenter, p
						.targetCenter) || p.sourceResolution !== p.targetResolution || p
					.sourceRotation !== p.targetRotation ? n += d.duration : d.complete = !0, l
					.push(d)
			}
			this.animations_.push(l), this.setHint(0, 1), this.updateAnimations_()
		}, cs.prototype.getAnimating = function() {
			return 0 < this.hints_[0]
		}, cs.prototype.getInteracting = function() {
			return 0 < this.hints_[1]
		}, cs.prototype.cancelAnimations = function() {
			this.setHint(0, -this.hints_[0]);
			for (var t = 0, e = this.animations_.length; t < e; ++t) {
				var i = this.animations_[t];
				i[0].callback && ls(i[0].callback, !1)
			}
			this.animations_.length = 0
		}, cs.prototype.updateAnimations_ = function() {
			if (void 0 !== this.updateAnimationKey_ && (cancelAnimationFrame(this
					.updateAnimationKey_), this.updateAnimationKey_ = void 0), this
			.getAnimating()) {
				for (var t = Date.now(), e = !1, i = this.animations_.length - 1; 0 <= i; --i) {
					for (var r, o = this.animations_[i], n = !0, s = 0, a = o.length; s < a; ++s) {
						var h = o[s];
						if (!h.complete) {
							var l = t - h.start,
								u = 0 < h.duration ? l / h.duration : 1;
							1 <= u ? (h.complete = !0, u = 1) : n = !1;
							var p, l = h.easing(u);
							if (h.sourceCenter && (u = h.sourceCenter[0], p = h.sourceCenter[1], u =
									u + l * (h.targetCenter[0] - u), p = p + l * (h.targetCenter[
										1] - p), this.set(is, [u, p])), h.sourceResolution && h
								.targetResolution && (p = 1 === l ? h.targetResolution : h
									.sourceResolution + l * (h.targetResolution - h
										.sourceResolution), h.anchor && this.set(is, this
										.calculateCenterZoom(p, h.anchor)), this.set(rs, p)),
								void 0 !== h.sourceRotation && void 0 !== h.targetRotation && (l =
									1 === l ? re(h.targetRotation + Math.PI, 2 * Math.PI) - Math
									.PI : h.sourceRotation + l * (h.targetRotation - h
										.sourceRotation), h.anchor && this.set(is, this
										.calculateCenterRotate(l, h.anchor)), this.set(os, l)),
								e = !0, !h.complete) break
						}
					}
					n && (this.animations_[i] = null, this.setHint(0, -1), (r = o[0].callback) &&
						ls(r, !0))
				}
				this.animations_ = this.animations_.filter(Boolean), e && void 0 === this
					.updateAnimationKey_ && (this.updateAnimationKey_ = requestAnimationFrame(this
						.updateAnimations_))
			}
		}, cs.prototype.calculateCenterRotate = function(t, e) {
			var i, r = this.getCenter();
			return void 0 !== r && (Nr(i = [r[0] - e[0], r[1] - e[1]], t - this.getRotation()), Pr(
				i, e)), i
		}, cs.prototype.calculateCenterZoom = function(t, e) {
			var i, r = this.getCenter(),
				o = this.getResolution();
			return void 0 !== r && void 0 !== o && (i = [e[0] - t * (e[0] - r[0]) / o, e[1] - t * (
				e[1] - r[1]) / o]), i
		}, cs.prototype.getSizeFromViewport_ = function() {
			var t = [100, 100],
				e = '.ol-viewport[data-view="' + ct(this) + '"]',
				e = document.querySelector(e);
			return e && (e = getComputedStyle(e), t[0] = parseInt(e.width, 10), t[1] = parseInt(e
				.height, 10)), t
		}, cs.prototype.constrainCenter = function(t) {
			return this.constraints_.center(t)
		}, cs.prototype.constrainResolution = function(t, e, i) {
			e = e || 0, i = i || 0;
			return this.constraints_.resolution(t, e, i)
		}, cs.prototype.constrainRotation = function(t, e) {
			e = e || 0;
			return this.constraints_.rotation(t, e)
		}, cs.prototype.getCenter = function() {
			return this.get(is)
		}, cs.prototype.getConstraints = function() {
			return this.constraints_
		}, cs.prototype.getHints = function(t) {
			return void 0 !== t ? (t[0] = this.hints_[0], t[1] = this.hints_[1], t) : this.hints_
				.slice()
		}, cs.prototype.calculateExtent = function(t) {
			var e = t || this.getSizeFromViewport_(),
				i = this.getCenter();
			$(i, 1);
			var r = this.getResolution();
			$(void 0 !== r, 2);
			t = this.getRotation();
			return $(void 0 !== t, 3), Dt(i, r, t, e)
		}, cs.prototype.getMaxResolution = function() {
			return this.maxResolution_
		}, cs.prototype.getMinResolution = function() {
			return this.minResolution_
		}, cs.prototype.getMaxZoom = function() {
			return this.getZoomForResolution(this.minResolution_)
		}, cs.prototype.setMaxZoom = function(t) {
			this.applyOptions_(this.getUpdatedOptions_({
				maxZoom: t
			}))
		}, cs.prototype.getMinZoom = function() {
			return this.getZoomForResolution(this.maxResolution_)
		}, cs.prototype.setMinZoom = function(t) {
			this.applyOptions_(this.getUpdatedOptions_({
				minZoom: t
			}))
		}, cs.prototype.getProjection = function() {
			return this.projection_
		}, cs.prototype.getResolution = function() {
			return this.get(rs)
		}, cs.prototype.getResolutions = function() {
			return this.resolutions_
		}, cs.prototype.getResolutionForExtent = function(t, e) {
			var i = e || this.getSizeFromViewport_(),
				e = Bt(t) / i[0],
				i = kt(t) / i[1];
			return Math.max(e, i)
		}, cs.prototype.getResolutionForValueFunction = function(t) {
			var e = t || 2,
				i = this.maxResolution_,
				t = this.minResolution_,
				r = Math.log(i / t) / Math.log(e);
			return function(t) {
				return i / Math.pow(e, t * r)
			}
		}, cs.prototype.getRotation = function() {
			return this.get(os)
		}, cs.prototype.getValueForResolutionFunction = function(t) {
			var e = t || 2,
				i = this.maxResolution_,
				t = this.minResolution_,
				r = Math.log(i / t) / Math.log(e);
			return function(t) {
				return Math.log(i / t) / Math.log(e) / r
			}
		}, cs.prototype.getState = function(t) {
			var e = this.getCenter(),
				i = this.getProjection(),
				r = this.getResolution(),
				o = r / t,
				t = this.getRotation();
			return {
				center: [Math.round(e[0] / o) * o, Math.round(e[1] / o) * o],
				projection: void 0 !== i ? i : null,
				resolution: r,
				rotation: t,
				zoom: this.getZoom()
			}
		}, cs.prototype.getZoom = function() {
			var t, e = this.getResolution();
			return void 0 !== e && (t = this.getZoomForResolution(e)), t
		}, cs.prototype.getZoomForResolution = function(t) {
			var e, i, r = this.minZoom_ || 0;
			return i = this.resolutions_ ? (r = i = nt(this.resolutions_, t, 1), e = this
					.resolutions_[i], i == this.resolutions_.length - 1 ? 2 : e / this.resolutions_[
						i + 1]) : (e = this.maxResolution_, this.zoomFactor_), r + Math.log(e / t) /
				Math.log(i)
		}, cs.prototype.getResolutionForZoom = function(t) {
			return this.constrainResolution(this.maxResolution_, t - this.minZoom_, 0)
		}, cs.prototype.fit = function(t, e) {
			var i, r = e || {},
				o = (o = r.size) || this.getSizeFromViewport_();
			$(Array.isArray(t) || "function" == typeof t.getSimplifiedGeometry, 24), Array.isArray(
				t) ? ($(!Xt(t), 25), i = Qi(t)) : t.getType() === Ht.CIRCLE ? (i = Qi(t = t
				.getExtent())).rotate(this.getRotation(), Gt(t)) : i = t;
			for (var n = void 0 !== r.padding ? r.padding : [0, 0, 0, 0], s = void 0 === r
					.constrainResolution || r.constrainResolution, a = void 0 !== r.nearest && r
					.nearest, e = void 0 !== r.minResolution ? r.minResolution : void 0 !== r
					.maxZoom ? this.constrainResolution(this.maxResolution_, r.maxZoom - this
						.minZoom_, 0) : 0, h = i.getFlatCoordinates(), t = this.getRotation(), l =
					Math.cos(-t), u = Math.sin(-t), p = 1 / 0, c = 1 / 0, d = -1 / 0, _ = -1 / 0,
					f = i.getStride(), g = 0, y = h.length; g < y; g += f) var m = h[g] * l - h[g +
					1] * u,
				v = h[g] * u + h[g + 1] * l,
				p = Math.min(p, m),
				c = Math.min(c, v),
				d = Math.max(d, m),
				_ = Math.max(_, v);
			o = this.getResolutionForExtent([p, c, d, _], [o[0] - n[1] - n[3], o[1] - n[0] - n[2]]),
				o = isNaN(o) ? e : Math.max(o, e);
			s && (x = this.constrainResolution(o, 0, 0), !a && x < o && (x = this
				.constrainResolution(x, -1, 0)), o = x), u = -u;
			var a = (p + d) / 2,
				x = (c + _) / 2,
				x = [(a += (n[1] - n[3]) / 2 * o) * l - (x += (n[0] - n[2]) / 2 * o) * u, x * l +
					a * u
				],
				a = r.callback || L;
			void 0 !== r.duration ? this.animate({
				resolution: o,
				center: x,
				duration: r.duration,
				easing: r.easing
			}, a) : (this.setResolution(o), this.setCenter(x), ls(a, !0))
		}, cs.prototype.centerOn = function(t, e, i) {
			var r = this.getRotation(),
				o = Math.cos(-r),
				n = Math.sin(-r),
				s = t[0] * o - t[1] * n,
				r = t[1] * o + t[0] * n,
				t = this.getResolution(),
				t = (s += (e[0] / 2 - i[0]) * t) * o - (r += (i[1] - e[1] / 2) * t) * (n = -n),
				n = r * o + s * n;
			this.setCenter([t, n])
		}, cs.prototype.isDef = function() {
			return !!this.getCenter() && void 0 !== this.getResolution()
		}, cs.prototype.rotate = function(t, e) {
			void 0 !== e && (e = this.calculateCenterRotate(t, e), this.setCenter(e)), this
				.setRotation(t)
		}, cs.prototype.setCenter = function(t) {
			this.set(is, t), this.getAnimating() && this.cancelAnimations()
		}, cs.prototype.setHint = function(t, e) {
			return this.hints_[t] += e, this.changed(), this.hints_[t]
		}, cs.prototype.setResolution = function(t) {
			this.set(rs, t), this.getAnimating() && this.cancelAnimations()
		}, cs.prototype.setRotation = function(t) {
			this.set(os, t), this.getAnimating() && this.cancelAnimations()
		}, cs.prototype.setZoom = function(t) {
			this.setResolution(this.getResolutionForZoom(t))
		}, cs);

		function cs(t) {
			us.call(this);
			t = y({}, t);
			this.hints_ = [0, 0], this.animations_ = [], this.updateAnimationKey_, this.updateAnimations_ =
				this.updateAnimations_.bind(this), this.projection_ = Ye(t.projection, "EPSG:3857"), this
				.applyOptions_(t)
		}

		function ds(t, e) {
			var i = document.createElement("canvas");
			return t && (i.width = t), e && (i.height = e), i.getContext("2d")
		}

		function _s(t, e) {
			var i = e.parentNode;
			i && i.replaceChild(t, e)
		}

		function fs(t) {
			return t && t.parentNode && t.parentNode.removeChild(t)
		}

		function gs(t) {
			for (; t.lastChild;) t.removeChild(t.lastChild)
		}
		var ys, ms, vs = "opacity",
			xs = "visible",
			Es = "extent",
			Ss = "zIndex",
			Cs = "maxResolution",
			ws = "minResolution",
			Ts = "source",
			Rs = ((ms = K) && (As.__proto__ = ms), ((As.prototype = Object.create(ms && ms.prototype))
				.constructor = As).prototype.getType = function() {
				return this.type
			}, As.prototype.getLayerState = function() {
				var t = this.state_ || {
					layer: this,
					managed: !0
				};
				return t.opacity = Jt(this.getOpacity(), 0, 1), t.sourceState = this.getSourceState(), t
					.visible = this.getVisible(), t.extent = this.getExtent(), t.zIndex = this
					.getZIndex() || 0, t.maxResolution = this.getMaxResolution(), t.minResolution = Math
					.max(this.getMinResolution(), 0), this.state_ = t
			}, As.prototype.getLayersArray = function(t) {
				return a()
			}, As.prototype.getLayerStatesArray = function(t) {
				return a()
			}, As.prototype.getExtent = function() {
				return this.get(Es)
			}, As.prototype.getMaxResolution = function() {
				return this.get(Cs)
			}, As.prototype.getMinResolution = function() {
				return this.get(ws)
			}, As.prototype.getOpacity = function() {
				return this.get(vs)
			}, As.prototype.getSourceState = function() {
				return a()
			}, As.prototype.getVisible = function() {
				return this.get(xs)
			}, As.prototype.getZIndex = function() {
				return this.get(Ss)
			}, As.prototype.setExtent = function(t) {
				this.set(Es, t)
			}, As.prototype.setMaxResolution = function(t) {
				this.set(Cs, t)
			}, As.prototype.setMinResolution = function(t) {
				this.set(ws, t)
			}, As.prototype.setOpacity = function(t) {
				this.set(vs, t)
			}, As.prototype.setVisible = function(t) {
				this.set(xs, t)
			}, As.prototype.setZIndex = function(t) {
				this.set(Ss, t)
			}, As),
			Is = "undefined",
			Ls = "loading",
			bs = "ready",
			Ps = "error",
			Ms = "layers",
			Fs = ((ys = Rs) && (Os.__proto__ = ys), ((Os.prototype = Object.create(ys && ys.prototype))
				.constructor = Os).prototype.handleLayerChange_ = function() {
				this.changed()
			}, Os.prototype.handleLayersChanged_ = function() {
				this.layersListenerKeys_.forEach(S), this.layersListenerKeys_.length = 0;
				var t, e = this.getLayers();
				for (t in this.layersListenerKeys_.push(E(e, s, this.handleLayersAdd_, this), E(e, h,
						this.handleLayersRemove_, this)), this.listenerKeys_) this.listenerKeys_[t]
					.forEach(S);
				_(this.listenerKeys_);
				for (var i = e.getArray(), r = 0, o = i.length; r < o; r++) {
					var n = i[r];
					this.listenerKeys_[ct(n)] = [E(n, l, this.handleLayerChange_, this), E(n, A.CHANGE,
						this.handleLayerChange_, this)]
				}
				this.changed()
			}, Os.prototype.handleLayersAdd_ = function(t) {
				t = t.element;
				this.listenerKeys_[ct(t)] = [E(t, l, this.handleLayerChange_, this), E(t, A.CHANGE, this
					.handleLayerChange_, this)], this.changed()
			}, Os.prototype.handleLayersRemove_ = function(t) {
				t = ct(t.element);
				this.listenerKeys_[t].forEach(S), delete this.listenerKeys_[t], this.changed()
			}, Os.prototype.getLayers = function() {
				return this.get(Ms)
			}, Os.prototype.setLayers = function(t) {
				this.set(Ms, t)
			}, Os.prototype.getLayersArray = function(t) {
				var e = void 0 !== t ? t : [];
				return this.getLayers().forEach(function(t) {
					t.getLayersArray(e)
				}), e
			}, Os.prototype.getLayerStatesArray = function(t) {
				var e = void 0 !== t ? t : [],
					t = e.length;
				this.getLayers().forEach(function(t) {
					t.getLayerStatesArray(e)
				});
				for (var i = this.getLayerState(), r = t, o = e.length; r < o; r++) {
					var n = e[r];
					n.opacity *= i.opacity, n.visible = n.visible && i.visible, n.maxResolution = Math
						.min(n.maxResolution, i.maxResolution), n.minResolution = Math.max(n
							.minResolution, i.minResolution), void 0 !== i.extent && (void 0 !== n
							.extent ? n.extent = jt(n.extent, i.extent) : n.extent = i.extent)
				}
				return e
			}, Os.prototype.getSourceState = function() {
				return bs
			}, Os);

		function Os(t) {
			var e = t || {},
				t = y({}, e);
			delete t.layers;
			e = e.layers;
			ys.call(this, t), this.layersListenerKeys_ = [], this.listenerKeys_ = {}, E(this, z(Ms), this
				.handleLayersChanged_, this), e ? Array.isArray(e) ? e = new Z(e.slice(), {
				unique: !0
			}) : $("function" == typeof e.getArray, 43) : e = new Z(void 0, {
				unique: !0
			}), this.setLayers(e)
		}

		function As(t) {
			ms.call(this);
			var e = y({}, t);
			e[vs] = void 0 !== t.opacity ? t.opacity : 1, e[xs] = void 0 === t.visible || t.visible, e[Ss] =
				t.zIndex, e[Cs] = void 0 !== t.maxResolution ? t.maxResolution : 1 / 0, e[ws] = void 0 !== t
				.minResolution ? t.minResolution : 0, this.setProperties(e), this.state_ = null, this.type
		}

		function Ns(t, e, i) {
			return void 0 === i && (i = [0, 0]), i[0] = t[0] + 2 * e, i[1] = t[1] + 2 * e, i
		}

		function Gs(t, e, i) {
			return void 0 === i && (i = [0, 0]), i[0] = t[0] * e + .5 | 0, i[1] = t[1] * e + .5 | 0, i
		}

		function Ds(t, e) {
			return Array.isArray(t) ? t : (void 0 === e ? e = [t, t] : e[0] = e[1] = t, e)
		}
		var ks, js = ((ks = K) && (Us.__proto__ = ks), ((Us.prototype = Object.create(ks && ks.prototype))
			.constructor = Us).prototype.createRenderer = function() {
			throw new Error("Use a map type that has a createRenderer method")
		}, Us.prototype.addControl = function(t) {
			this.getControls().push(t)
		}, Us.prototype.addInteraction = function(t) {
			this.getInteractions().push(t)
		}, Us.prototype.addLayer = function(t) {
			this.getLayerGroup().getLayers().push(t)
		}, Us.prototype.addOverlay = function(t) {
			this.getOverlays().push(t)
		}, Us.prototype.addOverlayInternal_ = function(t) {
			var e = t.getId();
			void 0 !== e && (this.overlayIdIndex_[e.toString()] = t), t.setMap(this)
		}, Us.prototype.disposeInternal = function() {
			this.mapBrowserEventHandler_.dispose(), x(this.viewport_, A.CONTEXTMENU, this
					.handleBrowserEvent, this), x(this.viewport_, A.WHEEL, this.handleBrowserEvent,
					this), x(this.viewport_, A.MOUSEWHEEL, this.handleBrowserEvent, this),
				void 0 !== this.handleResize_ && (removeEventListener(A.RESIZE, this.handleResize_,
					!1), this.handleResize_ = void 0), this.animationDelayKey_ && (
					cancelAnimationFrame(this.animationDelayKey_), this.animationDelayKey_ = void 0
					), this.setTarget(null), ks.prototype.disposeInternal.call(this)
		}, Us.prototype.forEachFeatureAtPixel = function(t, e, i) {
			if (this.frameState_) {
				var r = this.getCoordinateFromPixel(t),
					t = void 0 !== (i = void 0 !== i ? i : {}).hitTolerance ? i.hitTolerance * this
					.frameState_.pixelRatio : 0,
					i = void 0 !== i.layerFilter ? i.layerFilter : R;
				return this.renderer_.forEachFeatureAtCoordinate(r, this.frameState_, t, e, null, i,
					null)
			}
		}, Us.prototype.getFeaturesAtPixel = function(t, e) {
			var i = null;
			return this.forEachFeatureAtPixel(t, function(t) {
				(i = i || []).push(t)
			}, e), i
		}, Us.prototype.forEachLayerAtPixel = function(t, e, i) {
			if (this.frameState_) {
				var r = i || {},
					i = void 0 !== r.hitTolerance ? i.hitTolerance * this.frameState_.pixelRatio :
					0,
					r = r.layerFilter || R;
				return this.renderer_.forEachLayerAtPixel(t, this.frameState_, i, e, null, r, null)
			}
		}, Us.prototype.hasFeatureAtPixel = function(t, e) {
			if (!this.frameState_) return !1;
			var i = this.getCoordinateFromPixel(t),
				t = void 0 !== (e = void 0 !== e ? e : {}).layerFilter ? e.layerFilter : R,
				e = void 0 !== e.hitTolerance ? e.hitTolerance * this.frameState_.pixelRatio : 0;
			return this.renderer_.hasFeatureAtCoordinate(i, this.frameState_, e, t, null)
		}, Us.prototype.getEventCoordinate = function(t) {
			return this.getCoordinateFromPixel(this.getEventPixel(t))
		}, Us.prototype.getEventPixel = function(t) {
			var e = this.viewport_.getBoundingClientRect(),
				t = "changedTouches" in t ? t.changedTouches[0] : t;
			return [t.clientX - e.left, t.clientY - e.top]
		}, Us.prototype.getTarget = function() {
			return this.get(Un)
		}, Us.prototype.getTargetElement = function() {
			var t = this.getTarget();
			return void 0 !== t ? "string" == typeof t ? document.getElementById(t) : t : null
		}, Us.prototype.getCoordinateFromPixel = function(t) {
			var e = this.frameState_;
			return e ? ti(e.pixelToCoordinateTransform, t.slice()) : null
		}, Us.prototype.getControls = function() {
			return this.controls
		}, Us.prototype.getOverlays = function() {
			return this.overlays_
		}, Us.prototype.getOverlayById = function(t) {
			t = this.overlayIdIndex_[t.toString()];
			return void 0 !== t ? t : null
		}, Us.prototype.getInteractions = function() {
			return this.interactions
		}, Us.prototype.getLayerGroup = function() {
			return this.get(kn)
		}, Us.prototype.getLayers = function() {
			return this.getLayerGroup().getLayers()
		}, Us.prototype.getPixelFromCoordinate = function(t) {
			var e = this.frameState_;
			return e ? ti(e.coordinateToPixelTransform, t.slice(0, 2)) : null
		}, Us.prototype.getRenderer = function() {
			return this.renderer_
		}, Us.prototype.getSize = function() {
			return this.get(jn)
		}, Us.prototype.getView = function() {
			return this.get(Yn)
		}, Us.prototype.getViewport = function() {
			return this.viewport_
		}, Us.prototype.getOverlayContainer = function() {
			return this.overlayContainer_
		}, Us.prototype.getOverlayContainerStopEvent = function() {
			return this.overlayContainerStopEvent_
		}, Us.prototype.getTilePriority = function(t, e, i, r) {
			var o = this.frameState_;
			if (!(o && e in o.wantedTiles)) return 1 / 0;
			if (!o.wantedTiles[e][t.getKey()]) return 1 / 0;
			t = i[0] - o.focus[0], o = i[1] - o.focus[1];
			return 65536 * Math.log(r) + Math.sqrt(t * t + o * o) / r
		}, Us.prototype.handleBrowserEvent = function(t, e) {
			e = e || t.type, t = new wo(e, this, t);
			this.handleMapBrowserEvent(t)
		}, Us.prototype.handleMapBrowserEvent = function(t) {
			if (this.frameState_) {
				this.focus_ = t.coordinate, t.frameState = this.frameState_;
				var e = this.getInteractions().getArray();
				if (!1 !== this.dispatchEvent(t))
					for (var i = e.length - 1; 0 <= i; i--) {
						var r = e[i];
						if (r.getActive() && !r.handleEvent(t)) break
					}
			}
		}, Us.prototype.handlePostRender = function() {
			var t, e, i, o = this.frameState_,
				r = this.tileQueue_;
			r.isEmpty() || (e = t = this.maxTilesLoading_, o && ((i = o.viewHints)[0] && (t = this
					.loadTilesWhileAnimating_ ? 8 : 0, e = 2), i[1] && (t = this
					.loadTilesWhileInteracting_ ? 8 : 0, e = 2)), r.getTilesLoading() < t && (r
					.reprioritize(), r.loadMoreTiles(t, e))), !o || !this.hasListener(Jr) || o
				.animate || this.tileQueue_.getTilesLoading() || function o(t) {
					for (var e = 0, i = t.length; e < i; ++e) {
						var r = t[e];
						if ("function" == typeof r.getLayers) return o(r.getLayers().getArray());
						r = r.getSource();
						if (r && r.loading) return !0
					}
					return !1
				}(this.getLayers().getArray()) || this.renderer_.dispatchRenderEvent(Jr, o);
			for (var n = this.postRenderFunctions_, s = 0, a = n.length; s < a; ++s) n[s](this, o);
			n.length = 0
		}, Us.prototype.handleSizeChanged_ = function() {
			this.render()
		}, Us.prototype.handleTargetChanged_ = function() {
			var t;
			if (this.getTarget() && (t = this.getTargetElement()), this.keyHandlerKeys_) {
				for (var e = 0, i = this.keyHandlerKeys_.length; e < i; ++e) S(this.keyHandlerKeys_[
					e]);
				this.keyHandlerKeys_ = null
			}
			t ? (t.appendChild(this.viewport_), t = this.keyboardEventTarget_ || t, this
				.keyHandlerKeys_ = [E(t, A.KEYDOWN, this.handleBrowserEvent, this), E(t, A
					.KEYPRESS, this.handleBrowserEvent, this)], this.handleResize_ || (this
					.handleResize_ = this.updateSize.bind(this), addEventListener(A.RESIZE, this
						.handleResize_, !1))) : (this.renderer_.removeLayerRenderers(), fs(this
				.viewport_), void 0 !== this.handleResize_ && (removeEventListener(A.RESIZE,
				this.handleResize_, !1), this.handleResize_ = void 0)), this.updateSize()
		}, Us.prototype.handleTileChange_ = function() {
			this.render()
		}, Us.prototype.handleViewPropertyChanged_ = function() {
			this.render()
		}, Us.prototype.handleViewChanged_ = function() {
			this.viewPropertyListenerKey_ && (S(this.viewPropertyListenerKey_), this
				.viewPropertyListenerKey_ = null), this.viewChangeListenerKey_ && (S(this
				.viewChangeListenerKey_), this.viewChangeListenerKey_ = null);
			var t = this.getView();
			t && (this.viewport_.setAttribute("data-view", ct(t)), this.viewPropertyListenerKey_ =
				E(t, l, this.handleViewPropertyChanged_, this), this.viewChangeListenerKey_ = E(
					t, A.CHANGE, this.handleViewPropertyChanged_, this)), this.render()
		}, Us.prototype.handleLayerGroupChanged_ = function() {
			this.layerGroupPropertyListenerKeys_ && (this.layerGroupPropertyListenerKeys_.forEach(
				S), this.layerGroupPropertyListenerKeys_ = null);
			var t = this.getLayerGroup();
			t && (this.layerGroupPropertyListenerKeys_ = [E(t, l, this.render, this), E(t, A.CHANGE,
				this.render, this)]), this.render()
		}, Us.prototype.isRendered = function() {
			return !!this.frameState_
		}, Us.prototype.renderSync = function() {
			this.animationDelayKey_ && cancelAnimationFrame(this.animationDelayKey_), this
				.animationDelay_()
		}, Us.prototype.render = function() {
			void 0 === this.animationDelayKey_ && (this.animationDelayKey_ = requestAnimationFrame(
				this.animationDelay_))
		}, Us.prototype.removeControl = function(t) {
			return this.getControls().remove(t)
		}, Us.prototype.removeInteraction = function(t) {
			return this.getInteractions().remove(t)
		}, Us.prototype.removeLayer = function(t) {
			return this.getLayerGroup().getLayers().remove(t)
		}, Us.prototype.removeOverlay = function(t) {
			return this.getOverlays().remove(t)
		}, Us.prototype.renderFrame_ = function(t) {
			var e, i = this.getSize(),
				r = this.getView(),
				o = [1 / 0, 1 / 0, -1 / 0, -1 / 0],
				n = this.frameState_,
				s = null;
			if (void 0 !== i && 0 < i[0] && 0 < i[1] && r && r.isDef()) {
				for (var a = r.getHints(this.frameState_ ? this.frameState_.viewHints : void 0), h =
						this.getLayerGroup().getLayerStatesArray(), l = {}, u = 0, p = h.length; u <
					p; ++u) l[ct(h[u].layer)] = h[u];
				e = r.getState(this.pixelRatio_), s = {
					animate: !1,
					coordinateToPixelTransform: this.coordinateToPixelTransform_,
					extent: o,
					focus: this.focus_ || e.center,
					index: this.frameIndex_++,
					layerStates: l,
					layerStatesArray: h,
					pixelRatio: this.pixelRatio_,
					pixelToCoordinateTransform: this.pixelToCoordinateTransform_,
					postRenderFunctions: [],
					size: i,
					skippedFeatureUids: this.skippedFeatureUids_,
					tileQueue: this.tileQueue_,
					time: t,
					usedTiles: {},
					viewState: e,
					viewHints: a,
					wantedTiles: {}
				}
			}
			s && (s.extent = Dt(e.center, e.resolution, e.rotation, s.size, o)), this.frameState_ =
				s, this.renderer_.renderFrame(s), s && (s.animate && this.render(), Array.prototype
					.push.apply(this.postRenderFunctions_, s.postRenderFunctions), n && (this
						.previousExtent_ && (Xt(this.previousExtent_) || Lt(s.extent, this
							.previousExtent_)) || (this.dispatchEvent(new Co("movestart", this, n)),
							this.previousExtent_ = Tt(this.previousExtent_))), !this
					.previousExtent_ || s.viewHints[0] || s.viewHints[1] || Lt(s.extent, this
						.previousExtent_) || (this.dispatchEvent(new Co("moveend", this, s)), yt(s
						.extent, this.previousExtent_))), this.dispatchEvent(new Co(Dn, this, s)),
				setTimeout(this.handlePostRender.bind(this), 0)
		}, Us.prototype.setLayerGroup = function(t) {
			this.set(kn, t)
		}, Us.prototype.setSize = function(t) {
			this.set(jn, t)
		}, Us.prototype.setTarget = function(t) {
			this.set(Un, t)
		}, Us.prototype.setView = function(t) {
			this.set(Yn, t)
		}, Us.prototype.skipFeature = function(t) {
			this.skippedFeatureUids_[ct(t)] = !0, this.render()
		}, Us.prototype.updateSize = function() {
			var t, e = this.getTargetElement();
			e ? (t = getComputedStyle(e), this.setSize([e.offsetWidth - parseFloat(t
					.borderLeftWidth) - parseFloat(t.paddingLeft) - parseFloat(t
					.paddingRight) - parseFloat(t.borderRightWidth), e.offsetHeight -
				parseFloat(t.borderTopWidth) - parseFloat(t.paddingTop) - parseFloat(t
					.paddingBottom) - parseFloat(t.borderBottomWidth)
			])) : this.setSize(void 0)
		}, Us.prototype.unskipFeature = function(t) {
			delete this.skippedFeatureUids_[ct(t)], this.render()
		}, Us);

		function Us(t) {
			ks.call(this);
			var e = function(t) {
				var e = null;
				void 0 !== t.keyboardEventTarget && (e = "string" == typeof t.keyboardEventTarget ?
					document.getElementById(t.keyboardEventTarget) : t.keyboardEventTarget);
				var i, r, o = {},
					n = t.layers && "function" == typeof t.layers.getLayers ? t.layers : new Fs({
						layers: t.layers
					});
				return o[kn] = n, o[Un] = t.target, o[Yn] = void 0 !== t.view ? t.view : new ps,
					void 0 !== t.controls && (i = Array.isArray(t.controls) ? new Z(t.controls
					.slice()) : ($("function" == typeof t.controls.getArray, 47), t.controls)),
					void 0 !== t.interactions && (r = Array.isArray(t.interactions) ? new Z(t
						.interactions.slice()) : ($("function" == typeof t.interactions.getArray,
						48), t.interactions)), {
						controls: i,
						interactions: r,
						keyboardEventTarget: e,
						overlays: void 0 !== t.overlays ? Array.isArray(t.overlays) ? new Z(t.overlays
							.slice()) : ($("function" == typeof t.overlays.getArray, 49), t
							.overlays) : new Z,
						values: o
					}
			}(t);
			this.maxTilesLoading_ = void 0 !== t.maxTilesLoading ? t.maxTilesLoading : 16, this
				.loadTilesWhileAnimating_ = void 0 !== t.loadTilesWhileAnimating && t
				.loadTilesWhileAnimating, this.loadTilesWhileInteracting_ = void 0 !== t
				.loadTilesWhileInteracting && t.loadTilesWhileInteracting, this.pixelRatio_ = void 0 !== t
				.pixelRatio ? t.pixelRatio : hr, this.animationDelayKey_, this.animationDelay_ =
			function() {
					this.animationDelayKey_ = void 0, this.renderFrame_.call(this, Date.now())
				}.bind(this), this.coordinateToPixelTransform_ = [1, 0, 0, 1, 0, 0], this
				.pixelToCoordinateTransform_ = [1, 0, 0, 1, 0, 0], this.frameIndex_ = 0, this.frameState_ =
				null, this.previousExtent_ = null, this.viewPropertyListenerKey_ = null, this
				.viewChangeListenerKey_ = null, this.layerGroupPropertyListenerKeys_ = null, this
				.viewport_ = document.createElement("div"), this.viewport_.className = "ol-viewport" + (pr ?
					" ol-touch" : ""), this.viewport_.style.position = "relative", this.viewport_.style
				.overflow = "hidden", this.viewport_.style.width = "100%", this.viewport_.style.height =
				"100%", this.viewport_.style.msTouchAction = "none", this.viewport_.style.touchAction =
				"none", this.overlayContainer_ = document.createElement("div"), this.overlayContainer_
				.className = "ol-overlaycontainer", this.viewport_.appendChild(this.overlayContainer_), this
				.overlayContainerStopEvent_ = document.createElement("div"), this.overlayContainerStopEvent_
				.className = "ol-overlaycontainer-stopevent";
			for (var i, r = [A.CLICK, A.DBLCLICK, A.MOUSEDOWN, A.TOUCHSTART, A.MSPOINTERDOWN, To
					.POINTERDOWN, A.MOUSEWHEEL, A.WHEEL
				], o = 0, n = r.length; o < n; ++o) E(this.overlayContainerStopEvent_, r[o], P);
			for (i in this.viewport_.appendChild(this.overlayContainerStopEvent_), this
				.mapBrowserEventHandler_ = new Gn(this, t.moveTolerance), To) E(this
				.mapBrowserEventHandler_, To[i], this.handleMapBrowserEvent, this);
			this.keyboardEventTarget_ = e.keyboardEventTarget, this.keyHandlerKeys_ = null, E(this
					.viewport_, A.CONTEXTMENU, this.handleBrowserEvent, this), E(this.viewport_, A.WHEEL,
					this.handleBrowserEvent, this), E(this.viewport_, A.MOUSEWHEEL, this.handleBrowserEvent,
					this), this.controls = e.controls || new Z, this.interactions = e.interactions || new Z,
				this.overlays_ = e.overlays, this.overlayIdIndex_ = {}, this.renderer_ = this
				.createRenderer(), this.handleResize_, this.focus_ = null, this.postRenderFunctions_ = [],
				this.tileQueue_ = new Zn(this.getTilePriority.bind(this), this.handleTileChange_.bind(
				this)), this.skippedFeatureUids_ = {}, E(this, z(kn), this.handleLayerGroupChanged_, this),
				E(this, z(Yn), this.handleViewChanged_, this), E(this, z(jn), this.handleSizeChanged_,
				this), E(this, z(Un), this.handleTargetChanged_, this), this.setProperties(e.values), this
				.controls.forEach(function(t) {
					t.setMap(this)
				}.bind(this)), E(this.controls, s, function(t) {
					t.element.setMap(this)
				}, this), E(this.controls, h, function(t) {
					t.element.setMap(null)
				}, this), this.interactions.forEach(function(t) {
					t.setMap(this)
				}.bind(this)), E(this.interactions, s, function(t) {
					t.element.setMap(this)
				}, this), E(this.interactions, h, function(t) {
					t.element.setMap(null)
				}, this), this.overlays_.forEach(this.addOverlayInternal_.bind(this)), E(this.overlays_, s,
					function(t) {
						this.addOverlayInternal_(t.element)
					}, this), E(this.overlays_, h, function(t) {
					var e = t.element.getId();
					void 0 !== e && delete this.overlayIdIndex_[e.toString()], t.element.setMap(null)
				}, this)
		}
		var Ys, Bs, zs, Xs = ((zs = K) && (qs.__proto__ = zs), ((qs.prototype = Object.create(zs && zs
				.prototype)).constructor = qs).prototype.disposeInternal = function() {
				fs(this.element), zs.prototype.disposeInternal.call(this)
			}, qs.prototype.getMap = function() {
				return this.map_
			}, qs.prototype.setMap = function(t) {
				this.map_ && fs(this.element);
				for (var e = 0, i = this.listenerKeys.length; e < i; ++e) S(this.listenerKeys[e]);
				this.listenerKeys.length = 0, this.map_ = t, this.map_ && ((this.target_ || t
						.getOverlayContainerStopEvent()).appendChild(this.element), this.render !==
					L && this.listenerKeys.push(E(t, Dn, this.render, this)), t.render())
			}, qs.prototype.setTarget = function(t) {
				this.target_ = "string" == typeof t ? document.getElementById(t) : t
			}, qs),
			Vs = "ol-hidden",
			Ws = "ol-unselectable",
			Ks = "ol-control",
			Hs = "ol-collapsed",
			Zs = (Bs = {}, function(t) {
				if (Ys = Ys || document.createElement("div").style, !(t in Bs)) {
					Ys.font = t;
					var e = Ys.fontFamily;
					if (Ys.font = "", !e) return null;
					Bs[t] = e.split(/,\s?/)
				}
				return Bs[t]
			});

		function qs(t) {
			zs.call(this), this.element = t.element || null, this.target_ = null, this.map_ = null, this
				.listenerKeys = [], this.render = t.render || L, t.target && this.setTarget(t.target)
		}

		function Js(t, e) {
			return t.visible && e >= t.minResolution && e < t.maxResolution
		}
		var Qs, $s = ((Qs = Rs) && (ta.__proto__ = Qs), ((ta.prototype = Object.create(Qs && Qs.prototype))
			.constructor = ta).prototype.getLayersArray = function(t) {
			t = t || [];
			return t.push(this), t
		}, ta.prototype.getLayerStatesArray = function(t) {
			t = t || [];
			return t.push(this.getLayerState()), t
		}, ta.prototype.getSource = function() {
			return this.get(Ts) || null
		}, ta.prototype.getSourceState = function() {
			var t = this.getSource();
			return t ? t.getState() : Is
		}, ta.prototype.handleSourceChange_ = function() {
			this.changed()
		}, ta.prototype.handleSourcePropertyChange_ = function() {
			this.sourceChangeKey_ && (S(this.sourceChangeKey_), this.sourceChangeKey_ = null);
			var t = this.getSource();
			t && (this.sourceChangeKey_ = E(t, A.CHANGE, this.handleSourceChange_, this)), this
				.changed()
		}, ta.prototype.setMap = function(t) {
			this.mapPrecomposeKey_ && (S(this.mapPrecomposeKey_), this.mapPrecomposeKey_ = null),
				t || this.changed(), this.mapRenderKey_ && (S(this.mapRenderKey_), this
					.mapRenderKey_ = null), t && (this.mapPrecomposeKey_ = E(t, Zr, function(t) {
					var e = t,
						t = this.getLayerState();
					t.managed = !1, void 0 === this.getZIndex() && (t.zIndex = 1 / 0), e
						.frameState.layerStatesArray.push(t), e.frameState.layerStates[ct(
							this)] = t
				}, this), this.mapRenderKey_ = E(this, A.CHANGE, t.render, t), this.changed())
		}, ta.prototype.setSource = function(t) {
			this.set(Ts, t)
		}, ta);

		function ta(t) {
			var e = y({}, t);
			delete e.source, Qs.call(this, e), this.mapPrecomposeKey_ = null, this.mapRenderKey_ = null,
				this.sourceChangeKey_ = null, t.map && this.setMap(t.map), E(this, z(Ts), this
					.handleSourcePropertyChange_, this);
			t = t.source || null;
			this.setSource(t)
		}

		function ea(t) {
			this.updateElement_(t.frameState)
		}
		var ia, ra = ((ia = Xs) && (oa.__proto__ = ia), ((oa.prototype = Object.create(ia && ia.prototype))
			.constructor = oa).prototype.collectSourceAttributions_ = function(t) {
			for (var e = {}, i = [], r = t.layerStatesArray, o = t.viewState.resolution, n = 0, s =
					r.length; n < s; ++n) {
				var a = r[n];
				if (Js(a, o)) {
					var h = a.layer.getSource();
					if (h) {
						a = h.getAttributions();
						if (a) {
							var l = a(t);
							if (l)
								if (this.overrideCollapsible_ || !1 !== h
									.getAttributionsCollapsible() || this.setCollapsible(!1), Array
									.isArray(l))
									for (var u = 0, p = l.length; u < p; ++u) l[u] in e || (i.push(
										l[u]), e[l[u]] = !0);
								else l in e || (i.push(l), e[l] = !0)
						}
					}
				}
			}
			return i
		}, oa.prototype.updateElement_ = function(t) {
			if (t) {
				var e = this.collectSourceAttributions_(t),
					t = 0 < e.length;
				if (this.renderedVisible_ != t && (this.element.style.display = t ? "" : "none",
						this.renderedVisible_ = t), !_t(e, this.renderedAttributions_)) {
					gs(this.ulElement_);
					for (var i = 0, r = e.length; i < r; ++i) {
						var o = document.createElement("li");
						o.innerHTML = e[i], this.ulElement_.appendChild(o)
					}
					this.renderedAttributions_ = e
				}
			} else this.renderedVisible_ && (this.element.style.display = "none", this
				.renderedVisible_ = !1)
		}, oa.prototype.handleClick_ = function(t) {
			t.preventDefault(), this.handleToggle_()
		}, oa.prototype.handleToggle_ = function() {
			this.element.classList.toggle(Hs), this.collapsed_ ? _s(this.collapseLabel_, this
					.label_) : _s(this.label_, this.collapseLabel_), this.collapsed_ = !this
				.collapsed_
		}, oa.prototype.getCollapsible = function() {
			return this.collapsible_
		}, oa.prototype.setCollapsible = function(t) {
			this.collapsible_ !== t && (this.collapsible_ = t, this.element.classList.toggle(
				"ol-uncollapsible"), !t && this.collapsed_ && this.handleToggle_())
		}, oa.prototype.setCollapsed = function(t) {
			this.collapsible_ && this.collapsed_ !== t && this.handleToggle_()
		}, oa.prototype.getCollapsed = function() {
			return this.collapsed_
		}, oa);

		function oa(t) {
			var e = t || {};
			ia.call(this, {
					element: document.createElement("div"),
					render: e.render || ea,
					target: e.target
				}), this.ulElement_ = document.createElement("ul"), this.collapsed_ = void 0 === e
				.collapsed || e.collapsed, this.overrideCollapsible_ = void 0 !== e.collapsible, this
				.collapsible_ = void 0 === e.collapsible || e.collapsible, this.collapsible_ || (this
					.collapsed_ = !1);
			var i = void 0 !== e.className ? e.className : "ol-attribution",
				r = void 0 !== e.tipLabel ? e.tipLabel : "Attributions",
				t = void 0 !== e.collapseLabel ? e.collapseLabel : "»";
			"string" == typeof t ? (this.collapseLabel_ = document.createElement("span"), this
				.collapseLabel_.textContent = t) : this.collapseLabel_ = t;
			t = void 0 !== e.label ? e.label : "i";
			"string" == typeof t ? (this.label_ = document.createElement("span"), this.label_.textContent =
				t) : this.label_ = t;
			e = this.collapsible_ && !this.collapsed_ ? this.collapseLabel_ : this.label_, t = document
				.createElement("button");
			t.setAttribute("type", "button"), t.title = r, t.appendChild(e), E(t, A.CLICK, this
				.handleClick_, this);
			e = i + " " + Ws + " " + Ks + (this.collapsed_ && this.collapsible_ ? " " + Hs : "") + (this
				.collapsible_ ? "" : " ol-uncollapsible"), i = this.element;
			i.className = e, i.appendChild(this.ulElement_), i.appendChild(t), this
				.renderedAttributions_ = [], this.renderedVisible_ = !0
		}

		function na(t) {
			var e, i = t.frameState;
			i && ((e = i.viewState.rotation) != this.rotation_ && (t = "rotate(" + e + "rad)", this
				.autoHide_ && ((i = this.element.classList.contains(Vs)) || 0 !== e ? i && 0 !==
					e && this.element.classList.remove(Vs) : this.element.classList.add(Vs)), this
				.label_.style.msTransform = t, this.label_.style.webkitTransform = t, this.label_
				.style.transform = t), this.rotation_ = e)
		}
		var sa, aa, ha = ((aa = Xs) && (pa.__proto__ = aa), ((pa.prototype = Object.create(aa && aa
				.prototype)).constructor = pa).prototype.handleClick_ = function(t) {
				t.preventDefault(), void 0 !== this.callResetNorth_ ? this.callResetNorth_() : this
					.resetNorth_()
			}, pa.prototype.resetNorth_ = function() {
				var t = this.getMap().getView();
				t && void 0 !== t.getRotation() && (0 < this.duration_ ? t.animate({
					rotation: 0,
					duration: this.duration_,
					easing: ss
				}) : t.setRotation(0))
			}, pa),
			la = ((sa = Xs) && (ua.__proto__ = sa), ((ua.prototype = Object.create(sa && sa.prototype))
				.constructor = ua).prototype.handleClick_ = function(t, e) {
				e.preventDefault(), this.zoomByDelta_(t)
			}, ua.prototype.zoomByDelta_ = function(t) {
				var e, i = this.getMap().getView();
				!i || (e = i.getResolution()) && (t = i.constrainResolution(e, t), 0 < this.duration_ ?
					(i.getAnimating() && i.cancelAnimations(), i.animate({
						resolution: t,
						duration: this.duration_,
						easing: ss
					})) : i.setResolution(t))
			}, ua);

		function ua(t) {
			var e = t || {};
			sa.call(this, {
				element: document.createElement("div"),
				target: e.target
			});
			var i = void 0 !== e.className ? e.className : "ol-zoom",
				r = void 0 !== e.delta ? e.delta : 1,
				o = void 0 !== e.zoomInLabel ? e.zoomInLabel : "+",
				n = void 0 !== e.zoomOutLabel ? e.zoomOutLabel : "−",
				s = void 0 !== e.zoomInTipLabel ? e.zoomInTipLabel : "Zoom in",
				a = void 0 !== e.zoomOutTipLabel ? e.zoomOutTipLabel : "Zoom out",
				t = document.createElement("button");
			t.className = i + "-in", t.setAttribute("type", "button"), t.title = s, t.appendChild(
				"string" == typeof o ? document.createTextNode(o) : o), E(t, A.CLICK, this.handleClick_
				.bind(this, r));
			o = document.createElement("button");
			o.className = i + "-out", o.setAttribute("type", "button"), o.title = a, o.appendChild(
				"string" == typeof n ? document.createTextNode(n) : n), E(o, A.CLICK, this.handleClick_
				.bind(this, -r));
			r = i + " " + Ws + " " + Ks, i = this.element;
			i.className = r, i.appendChild(t), i.appendChild(o), this.duration_ = void 0 !== e.duration ? e
				.duration : 250
		}

		function pa(t) {
			var e = t || {};
			aa.call(this, {
				element: document.createElement("div"),
				render: e.render || na,
				target: e.target
			});
			var i = void 0 !== e.className ? e.className : "ol-rotate",
				r = void 0 !== e.label ? e.label : "⇧";
			this.label_ = null, "string" == typeof r ? (this.label_ = document.createElement("span"), this
				.label_.className = "ol-compass", this.label_.textContent = r) : (this.label_ = r, this
				.label_.classList.add("ol-compass"));
			t = e.tipLabel || "Reset rotation", r = document.createElement("button");
			r.className = i + "-reset", r.setAttribute("type", "button"), r.title = t, r.appendChild(this
				.label_), E(r, A.CLICK, this.handleClick_, this);
			t = i + " " + Ws + " " + Ks, i = this.element;
			i.className = t, i.appendChild(r), this.callResetNorth_ = e.resetNorth || void 0, this
				.duration_ = void 0 !== e.duration ? e.duration : 250, this.autoHide_ = void 0 === e
				.autoHide || e.autoHide, this.rotation_ = void 0, this.autoHide_ && this.element.classList
				.add(Vs)
		}

		function ca(t) {
			var e = t || {},
				t = new Z;
			return void 0 !== e.zoom && !e.zoom || t.push(new la(e.zoomOptions)), void 0 !== e.rotate && !e
				.rotate || t.push(new ha(e.rotateOptions)), void 0 !== e.attribution && !e.attribution || t
				.push(new ra(e.attributionOptions)), t
		}
		var da = "active";

		function _a(t, e, i, r) {
			fa(t, e = t.constrainRotation(e, 0), i, r)
		}

		function fa(t, e, i, r) {
			var o, n;
			void 0 !== e && (o = t.getRotation(), n = t.getCenter(), void 0 !== o && n && 0 < r ? t
		.animate({
				rotation: e,
				anchor: i,
				duration: r,
				easing: ss
			}) : t.rotate(e, i))
		}

		function ga(t, e, i, r, o) {
			ma(t, e = t.constrainResolution(e, 0, o), i, r)
		}

		function ya(t, e, i, r) {
			var o, n = t.getResolution(),
				s = t.constrainResolution(n, e, 0);
			void 0 !== s && (o = t.getResolutions(), s = Jt(s, t.getMinResolution() || o[o.length - 1], t
				.getMaxResolution() || o[0])), i && void 0 !== s && s !== n && (e = t.getCenter(), o = t
				.calculateCenterZoom(s, i), o = t.constrainCenter(o), i = [(s * e[0] - n * o[0]) / (s -
					n), (s * e[1] - n * o[1]) / (s - n)]), ma(t, s, i, r)
		}

		function ma(t, e, i, r) {
			var o, n;
			e && (o = t.getResolution(), n = t.getCenter(), void 0 !== o && n && e !== o && r ? t.animate({
				resolution: e,
				anchor: i,
				duration: r,
				easing: ss
			}) : (i && (i = t.calculateCenterZoom(e, i), t.setCenter(i)), t.setResolution(e)))
		}
		var va, xa = ((va = K) && (Ea.__proto__ = va), ((Ea.prototype = Object.create(va && va.prototype))
			.constructor = Ea).prototype.getActive = function() {
			return this.get(da)
		}, Ea.prototype.getMap = function() {
			return this.map_
		}, Ea.prototype.handleEvent = function(t) {
			return !0
		}, Ea.prototype.setActive = function(t) {
			this.set(da, t)
		}, Ea.prototype.setMap = function(t) {
			this.map_ = t
		}, Ea);

		function Ea(t) {
			va.call(this), t.handleEvent && (this.handleEvent = t.handleEvent), this.map_ = null, this
				.setActive(!0)
		}

		function Sa(t) {
			var e, i, r, o = !1;
			return t.type == To.DBLCLICK && (r = t.originalEvent, e = t.map, i = t.coordinate, r = r
				.shiftKey ? -this.delta_ : this.delta_, ya(e.getView(), r, i, this.duration_), t
				.preventDefault(), o = !0), !o
		}
		var Ca, wa = ((Ca = xa) && (ka.__proto__ = Ca), (ka.prototype = Object.create(Ca && Ca.prototype))
				.constructor = ka),
			Ta = function(t) {
				t = t.originalEvent;
				return t.altKey && !(t.metaKey || t.ctrlKey) && !t.shiftKey
			},
			Ra = function(t) {
				t = t.originalEvent;
				return t.altKey && !(t.metaKey || t.ctrlKey) && t.shiftKey
			},
			Ia = function(t) {
				return t.target.getTargetElement() === document.activeElement
			},
			La = R,
			ba = function(t) {
				t = t.originalEvent;
				return 0 == t.button && !(sr && ar && t.ctrlKey)
			},
			Pa = I,
			Ma = function(t) {
				return "pointermove" == t.type
			},
			Fa = function(t) {
				return t.type == To.SINGLECLICK
			},
			Oa = function(t) {
				t = t.originalEvent;
				return !t.altKey && !(t.metaKey || t.ctrlKey) && !t.shiftKey
			},
			Aa = function(t) {
				t = t.originalEvent;
				return !t.altKey && !(t.metaKey || t.ctrlKey) && t.shiftKey
			},
			Na = function(t) {
				t = t.originalEvent.target.tagName;
				return "INPUT" !== t && "SELECT" !== t && "TEXTAREA" !== t
			},
			Ga = function(t) {
				t = t.pointerEvent;
				return $(void 0 !== t, 56), "mouse" == t.pointerType
			},
			Da = function(t) {
				t = t.pointerEvent;
				return $(void 0 !== t, 56), t.isPrimary && 0 === t.button
			};

		function ka(t) {
			Ca.call(this, {
				handleEvent: Sa
			});
			t = t || {};
			this.delta_ = t.delta || 1, this.duration_ = void 0 !== t.duration ? t.duration : 250
		}

		function ja(t) {
			for (var e = t.length, i = 0, r = 0, o = 0; o < e; o++) i += t[o].clientX, r += t[o].clientY;
			return [i / e, r / e]
		}
		var Ua, Ya, Ba, za, Xa, Va, Wa = ((Va = xa) && (rh.__proto__ = Va), ((rh.prototype = Object.create(
				Va && Va.prototype)).constructor = rh).prototype.handleDownEvent = function(t) {
				return !1
			}, rh.prototype.handleDragEvent = function(t) {}, rh.prototype.handleEvent = function(t) {
				if (!t.pointerEvent) return !0;
				var e, i = !1;
				return this.updateTrackedPointers_(t), this.handlingDownUpSequence ? t.type == To
					.POINTERDRAG ? this.handleDragEvent(t) : t.type == To.POINTERUP && (e = this
						.handleUpEvent(t), this.handlingDownUpSequence = e && 0 < this.targetPointers
						.length) : t.type == To.POINTERDOWN ? ((e = this.handleDownEvent(t)) && t
						.preventDefault(), this.handlingDownUpSequence = e, i = this.stopDown(e)) : t
					.type == To.POINTERMOVE && this.handleMoveEvent(t), !i
			}, rh.prototype.handleMoveEvent = function(t) {}, rh.prototype.handleUpEvent = function(t) {
				return !1
			}, rh.prototype.stopDown = function(t) {
				return t
			}, rh.prototype.updateTrackedPointers_ = function(t) {
				var e, i;
				(i = t.type) !== To.POINTERDOWN && i !== To.POINTERDRAG && i !== To.POINTERUP || (i = (
						e = t.pointerEvent).pointerId.toString(), t.type == To.POINTERUP ?
					delete this.trackedPointers_[i] : (t.type == To.POINTERDOWN || i in this
						.trackedPointers_) && (this.trackedPointers_[i] = e), this.targetPointers =
					p(this.trackedPointers_))
			}, rh),
			Ka = ((Xa = Wa) && (ih.__proto__ = Xa), ((ih.prototype = Object.create(Xa && Xa.prototype))
				.constructor = ih).prototype.handleDragEvent = function(t) {
				this.panning_ || (this.panning_ = !0, this.getMap().getView().setHint(1, 1));
				var e, i = this.targetPointers,
					r = ja(i);
				i.length == this.lastPointersCount_ ? (this.kinetic_ && this.kinetic_.update(r[0], r[
						1]), this.lastCentroid && (Gr(e = [this.lastCentroid[0] - r[0], r[1] - this
							.lastCentroid[1]
						], (t = t.map.getView()).getResolution()), Nr(e, t.getRotation()), Pr(e, t
							.getCenter()), e = t.constrainCenter(e), t.setCenter(e))) : this.kinetic_ &&
					this.kinetic_.begin(), this.lastCentroid = r, this.lastPointersCount_ = i.length
			}, ih.prototype.handleUpEvent = function(t) {
				var e, i, r = t.map,
					o = r.getView();
				return 0 !== this.targetPointers.length ? (this.kinetic_ && this.kinetic_.begin(), !(
					this.lastCentroid = null)) : (!this.noKinetic_ && this.kinetic_ && this.kinetic_
					.end() && (e = this.kinetic_.getDistance(), i = this.kinetic_.getAngle(), t = o
						.getCenter(), t = r.getPixelFromCoordinate(t), i = r.getCoordinateFromPixel(
							[t[0] - e * Math.cos(i), t[1] - e * Math.sin(i)]), o.animate({
							center: o.constrainCenter(i),
							duration: 500,
							easing: ss
						})), this.panning_ && (this.panning_ = !1, o.setHint(1, -1)), !1)
			}, ih.prototype.handleDownEvent = function(t) {
				if (0 < this.targetPointers.length && this.condition_(t)) {
					var e = t.map.getView();
					return this.lastCentroid = null, e.getAnimating() && e.setCenter(t.frameState
							.viewState.center), this.kinetic_ && this.kinetic_.begin(), this
						.noKinetic_ = 1 < this.targetPointers.length, !0
				}
				return !1
			}, ih),
			Ha = ((za = Wa) && (eh.__proto__ = za), ((eh.prototype = Object.create(za && za.prototype))
				.constructor = eh).prototype.handleDragEvent = function(t) {
				var e, i;
				!Ga(t) || (e = (i = t.map).getView()).getConstraints().rotation !== ts && (i = i
					.getSize(), t = t.pixel, t = Math.atan2(i[1] / 2 - t[1], t[0] - i[0] / 2),
					void 0 !== this.lastAngle_ && (i = t - this.lastAngle_, fa(e, e.getRotation() -
						i)), this.lastAngle_ = t)
			}, eh.prototype.handleUpEvent = function(t) {
				if (!Ga(t)) return !0;
				t = t.map.getView();
				return t.setHint(1, -1), _a(t, t.getRotation(), void 0, this.duration_), !1
			}, eh.prototype.handleDownEvent = function(t) {
				return !(!Ga(t) || !ba(t) || !this.condition_(t) || (t.map.getView().setHint(1, 1), this
					.lastAngle_ = void 0))
			}, eh),
			Za = ((Ba = T) && (th.__proto__ = Ba), ((th.prototype = Object.create(Ba && Ba.prototype))
				.constructor = th).prototype.disposeInternal = function() {
				this.setMap(null)
			}, th.prototype.render_ = function() {
				var t = this.startPixel_,
					e = this.endPixel_,
					i = this.element_.style;
				i.left = Math.min(t[0], e[0]) + "px", i.top = Math.min(t[1], e[1]) + "px", i.width =
					Math.abs(e[0] - t[0]) + "px", i.height = Math.abs(e[1] - t[1]) + "px"
			}, th.prototype.setMap = function(t) {
				var e;
				this.map_ && (this.map_.getOverlayContainer().removeChild(this.element_), (e = this
						.element_.style).left = e.top = e.width = e.height = "inherit"), this.map_ = t,
					this.map_ && this.map_.getOverlayContainer().appendChild(this.element_)
			}, th.prototype.setPixels = function(t, e) {
				this.startPixel_ = t, this.endPixel_ = e, this.createOrUpdateGeometry(), this.render_()
			}, th.prototype.createOrUpdateGeometry = function() {
				var t = this.startPixel_,
					e = this.endPixel_,
					t = [t, [t[0], e[1]], e, [e[0], t[1]]].map(this.map_.getCoordinateFromPixel, this
						.map_);
				t[4] = t[0].slice(), this.geometry_ ? this.geometry_.setCoordinates([t]) : this
					.geometry_ = new Zi([t])
			}, th.prototype.getGeometry = function() {
				return this.geometry_
			}, th),
			qa = ((Ya = F) && ($a.__proto__ = Ya), ($a.prototype = Object.create(Ya && Ya.prototype))
				.constructor = $a),
			Ja = ((Ua = Wa) && (Qa.__proto__ = Ua), ((Qa.prototype = Object.create(Ua && Ua.prototype))
				.constructor = Qa).prototype.defaultBoxEndCondition = function(t, e, i) {
				var r = i[0] - e[0],
					e = i[1] - e[1];
				return r * r + e * e >= this.minArea_
			}, Qa.prototype.getGeometry = function() {
				return this.box_.getGeometry()
			}, Qa.prototype.handleDragEvent = function(t) {
				Ga(t) && (this.box_.setPixels(this.startPixel_, t.pixel), this.dispatchEvent(new qa(
					"boxdrag", t.coordinate, t)))
			}, Qa.prototype.handleUpEvent = function(t) {
				return !Ga(t) || (this.box_.setMap(null), this.boxEndCondition_(t, this.startPixel_, t
					.pixel) && (this.onBoxEnd_(t), this.dispatchEvent(new qa("boxend", t
					.coordinate, t))), !1)
			}, Qa.prototype.handleDownEvent = function(t) {
				return !(!Ga(t) || !ba(t) || !this.condition_(t) || (this.startPixel_ = t.pixel, this
					.box_.setMap(t.map), this.box_.setPixels(this.startPixel_, this
					.startPixel_), this.dispatchEvent(new qa("boxstart", t.coordinate, t)), 0))
			}, Qa);

		function Qa(t) {
			Ua.call(this);
			t = t || {};
			this.box_ = new Za(t.className || "ol-dragbox"), this.minArea_ = void 0 !== t.minArea ? t
				.minArea : 64, this.onBoxEnd_ = t.onBoxEnd || L, this.startPixel_ = null, this.condition_ =
				t.condition || La, this.boxEndCondition_ = t.boxEndCondition || this.defaultBoxEndCondition
		}

		function $a(t, e, i) {
			Ya.call(this, t), this.coordinate = e, this.mapBrowserEvent = i
		}

		function th(t) {
			Ba.call(this), this.geometry_ = null, this.element_ = document.createElement("div"), this
				.element_.style.position = "absolute", this.element_.className = "ol-box " + t, this.map_ =
				null, this.startPixel_ = null, this.endPixel_ = null
		}

		function eh(t) {
			t = t || {};
			za.call(this, {
					stopDown: I
				}), this.condition_ = t.condition || Ra, this.lastAngle_ = void 0, this.duration_ =
				void 0 !== t.duration ? t.duration : 250
		}

		function ih(t) {
			Xa.call(this, {
				stopDown: I
			});
			t = t || {};
			this.kinetic_ = t.kinetic, this.lastCentroid = null, this.lastPointersCount_, this.panning_ = !
				1, this.condition_ = t.condition || Oa, this.noKinetic_ = !1
		}

		function rh(t) {
			t = t || {};
			Va.call(this, t), t.handleDownEvent && (this.handleDownEvent = t.handleDownEvent), t
				.handleDragEvent && (this.handleDragEvent = t.handleDragEvent), t.handleMoveEvent && (this
					.handleMoveEvent = t.handleMoveEvent), t.handleUpEvent && (this.handleUpEvent = t
					.handleUpEvent), t.stopDown && (this.stopDown = t.stopDown), this
				.handlingDownUpSequence = !1, this.trackedPointers_ = {}, this.targetPointers = []
		}

		function oh() {
			var t, e = this.getMap(),
				i = e.getView(),
				r = e.getSize(),
				o = this.getGeometry().getExtent();
			this.out_ && (t = i.calculateExtent(r), e = [e.getPixelFromCoordinate(At(o)), e
				.getPixelFromCoordinate(Yt(o))
			], e = function(t, e) {
				for (var i = 0, r = e.length; i < r; ++i) Pt(t, e[i]);
				return t
			}(Tt(void 0), e), Vt(t, 1 / i.getResolutionForExtent(e, r)), o = t);
			r = i.constrainResolution(i.getResolutionForExtent(o, r)), o = Gt(o), o = i.constrainCenter(o);
			i.animate({
				resolution: r,
				center: o,
				duration: this.duration_,
				easing: ss
			})
		}
		var nh, sh = ((nh = Ja) && (hh.__proto__ = nh), (hh.prototype = Object.create(nh && nh.prototype))
				.constructor = hh),
			ah = {
				LEFT: 37,
				UP: 38,
				RIGHT: 39,
				DOWN: 40
			};

		function hh(t) {
			var e = t || {},
				t = e.condition || Aa;
			nh.call(this, {
					condition: t,
					className: e.className || "ol-dragzoom",
					onBoxEnd: oh
				}), this.duration_ = void 0 !== e.duration ? e.duration : 200, this.out_ = void 0 !== e
				.out && e.out
		}

		function lh(t) {
			var e, i, r, o, n, s = !1;
			return t.type == A.KEYDOWN && (e = t.originalEvent.keyCode, !this.condition_(t) || e != ah
				.DOWN && e != ah.LEFT && e != ah.RIGHT && e != ah.UP || (n = (o = t.map.getView())
					.getResolution() * this.pixelDelta_, r = i = 0, e == ah.DOWN ? r = -n : e == ah
					.LEFT ? i = -n : e == ah.RIGHT ? i = n : r = n, Nr(n = [i, r], o.getRotation()), i =
					o, r = n, o = this.duration_, (n = i.getCenter()) && (r = i.constrainCenter([n[0] +
						r[0], n[1] + r[1]
					]), o ? i.animate({
						duration: o,
						easing: hs,
						center: r
					}) : i.setCenter(r)), t.preventDefault(), s = !0)), !s
		}
		var uh, ph = ((uh = xa) && (ch.__proto__ = uh), (ch.prototype = Object.create(uh && uh.prototype))
			.constructor = ch);

		function ch(t) {
			uh.call(this, {
				handleEvent: lh
			});
			t = t || {};
			this.defaultCondition_ = function(t) {
					return Oa(t) && Na(t)
				}, this.condition_ = void 0 !== t.condition ? t.condition : this.defaultCondition_, this
				.duration_ = void 0 !== t.duration ? t.duration : 100, this.pixelDelta_ = void 0 !== t
				.pixelDelta ? t.pixelDelta : 128
		}

		function dh(t) {
			var e, i, r = !1;
			return t.type != A.KEYDOWN && t.type != A.KEYPRESS || (i = t.originalEvent.charCode, !this
				.condition_(t) || i != "+".charCodeAt(0) && i != "-".charCodeAt(0) || (e = t.map, i =
					i == "+".charCodeAt(0) ? this.delta_ : -this.delta_, ya(e.getView(), i, void 0, this
						.duration_), t.preventDefault(), r = !0)), !r
		}
		var _h, fh, gh, yh, mh = ((yh = xa) && (Rh.__proto__ = yh), (Rh.prototype = Object.create(yh && yh
				.prototype)).constructor = Rh),
			vh = "trackpad",
			xh = ((gh = xa) && (Th.__proto__ = gh), ((Th.prototype = Object.create(gh && gh.prototype))
				.constructor = Th).prototype.decrementInteractingHint_ = function() {
				this.trackpadTimeoutId_ = void 0, this.getMap().getView().setHint(1, -1)
			}, Th.prototype.handleEvent = function(t) {
				if (!this.condition_(t)) return !0;
				var e = t.type;
				if (e !== A.WHEEL && e !== A.MOUSEWHEEL) return !0;
				t.preventDefault();
				var i, r = t.map,
					o = t.originalEvent;
				if (this.useAnchor_ && (this.lastAnchor_ = t.coordinate), t.type == A.WHEEL ? (i = o
						.deltaY, or && o.deltaMode === WheelEvent.DOM_DELTA_PIXEL && (i /= hr), o
						.deltaMode === WheelEvent.DOM_DELTA_LINE && (i *= 40)) : t.type == A
					.MOUSEWHEEL && (i = -o.wheelDeltaY, nr && (i /= 3)), 0 === i) return !1;
				var n = Date.now();
				if (void 0 === this.startTime_ && (this.startTime_ = n), (!this.mode_ || n - this
						.startTime_ > this.trackpadEventGap_) && (this.mode_ = Math.abs(i) < 4 ? vh :
						"wheel"), this.mode_ === vh) {
					var s = r.getView();
					this.trackpadTimeoutId_ ? clearTimeout(this.trackpadTimeoutId_) : s.setHint(1, 1),
						this.trackpadTimeoutId_ = setTimeout(this.decrementInteractingHint_.bind(this),
							this.trackpadEventGap_);
					var a = s.getResolution() * Math.pow(2, i / this.trackpadDeltaPerZoom_),
						h = s.getMinResolution(),
						e = s.getMaxResolution(),
						t = 0;
					return a < h ? (a = Math.max(a, h / this.trackpadZoomBuffer_), t = 1) : e < a && (
							a = Math.min(a, e * this.trackpadZoomBuffer_), t = -1), this.lastAnchor_ &&
						(o = s.calculateCenterZoom(a, this.lastAnchor_), s.setCenter(s.constrainCenter(
							o))), s.setResolution(a), 0 === t && this.constrainResolution_ && s
					.animate({
							resolution: s.constrainResolution(a, 0 < i ? -1 : 1),
							easing: ss,
							anchor: this.lastAnchor_,
							duration: this.duration_
						}), 0 < t ? s.animate({
							resolution: h,
							easing: ss,
							anchor: this.lastAnchor_,
							duration: 500
						}) : t < 0 && s.animate({
							resolution: e,
							easing: ss,
							anchor: this.lastAnchor_,
							duration: 500
						}), this.startTime_ = n, !1
				}
				this.delta_ += i;
				n = Math.max(this.timeout_ - (n - this.startTime_), 0);
				return clearTimeout(this.timeoutId_), this.timeoutId_ = setTimeout(this.handleWheelZoom_
					.bind(this, r), n), !1
			}, Th.prototype.handleWheelZoom_ = function(t) {
				t = t.getView();
				t.getAnimating() && t.cancelAnimations(), ya(t, -Jt(this.delta_, -1, 1), this
						.lastAnchor_, this.duration_), this.mode_ = void 0, this.delta_ = 0, this
					.lastAnchor_ = null, this.startTime_ = void 0, this.timeoutId_ = void 0
			}, Th.prototype.setMouseAnchor = function(t) {
				(this.useAnchor_ = t) || (this.lastAnchor_ = null)
			}, Th),
			Eh = ((fh = Wa) && (wh.__proto__ = fh), ((wh.prototype = Object.create(fh && fh.prototype))
				.constructor = wh).prototype.handleDragEvent = function(t) {
				var e = 0,
					i = this.targetPointers[0],
					r = this.targetPointers[1],
					r = Math.atan2(r.clientY - i.clientY, r.clientX - i.clientX);
				void 0 !== this.lastAngle_ && (o = r - this.lastAngle_, this.rotationDelta_ += o, !this
					.rotating_ && Math.abs(this.rotationDelta_) > this.threshold_ && (this
						.rotating_ = !0), e = o), this.lastAngle_ = r;
				var i = t.map,
					o = i.getView();
				o.getConstraints().rotation !== ts && (r = i.getViewport().getBoundingClientRect(), (t =
						ja(this.targetPointers))[0] -= r.left, t[1] -= r.top, this.anchor_ = i
					.getCoordinateFromPixel(t), this.rotating_ && (t = o.getRotation(), i.render(),
						fa(o, t + e, this.anchor_)))
			}, wh.prototype.handleUpEvent = function(t) {
				if (this.targetPointers.length < 2) {
					t = t.map.getView();
					return t.setHint(1, -1), this.rotating_ && _a(t, t.getRotation(), this.anchor_, this
						.duration_), !1
				}
				return !0
			}, wh.prototype.handleDownEvent = function(t) {
				if (2 <= this.targetPointers.length) {
					t = t.map;
					return this.anchor_ = null, this.lastAngle_ = void 0, this.rotating_ = !1, this
						.rotationDelta_ = 0, this.handlingDownUpSequence || t.getView().setHint(1, 1), !
						0
				}
				return !1
			}, wh),
			Sh = ((_h = Wa) && (Ch.__proto__ = _h), ((Ch.prototype = Object.create(_h && _h.prototype))
				.constructor = Ch).prototype.handleDragEvent = function(t) {
				var e = 1,
					i = this.targetPointers[0],
					r = this.targetPointers[1],
					o = i.clientX - r.clientX,
					n = i.clientY - r.clientY,
					s = Math.sqrt(o * o + n * n);
				void 0 !== this.lastDistance_ && (e = this.lastDistance_ / s), this.lastDistance_ = s;
				i = t.map, r = i.getView(), o = r.getResolution(), n = r.getMaxResolution(), s = r
					.getMinResolution(), t = o * e;
				n < t ? (e = n / o, t = n) : t < s && (e = s / o, t = s), 1 != e && (this
					.lastScaleDelta_ = e);
				s = i.getViewport().getBoundingClientRect(), e = ja(this.targetPointers);
				e[0] -= s.left, e[1] -= s.top, this.anchor_ = i.getCoordinateFromPixel(e), i.render(),
					ma(r, t, this.anchor_)
			}, Ch.prototype.handleUpEvent = function(t) {
				if (this.targetPointers.length < 2) {
					var e = t.map.getView();
					e.setHint(1, -1);
					var i = e.getResolution();
					return (this.constrainResolution_ || i < e.getMinResolution() || i > e
						.getMaxResolution()) && (t = this.lastScaleDelta_ - 1, ga(e, i, this
						.anchor_, this.duration_, t)), !1
				}
				return !0
			}, Ch.prototype.handleDownEvent = function(t) {
				if (2 <= this.targetPointers.length) {
					t = t.map;
					return this.anchor_ = null, this.lastDistance_ = void 0, this.lastScaleDelta_ = 1,
						this.handlingDownUpSequence || t.getView().setHint(1, 1), !0
				}
				return !1
			}, Ch);

		function Ch(t) {
			var e = t || {},
				t = e;
			t.stopDown || (t.stopDown = I), _h.call(this, t), this.constrainResolution_ = e
				.constrainResolution || !1, this.anchor_ = null, this.duration_ = void 0 !== e.duration ? e
				.duration : 400, this.lastDistance_ = void 0, this.lastScaleDelta_ = 1
		}

		function wh(t) {
			var e = t || {},
				t = e;
			t.stopDown || (t.stopDown = I), fh.call(this, t), this.anchor_ = null, this.lastAngle_ = void 0,
				this.rotating_ = !1, this.rotationDelta_ = 0, this.threshold_ = void 0 !== e.threshold ? e
				.threshold : .3, this.duration_ = void 0 !== e.duration ? e.duration : 250
		}

		function Th(t) {
			t = t || {};
			gh.call(this, t), this.delta_ = 0, this.duration_ = void 0 !== t.duration ? t.duration : 250,
				this.timeout_ = void 0 !== t.timeout ? t.timeout : 80, this.useAnchor_ = void 0 === t
				.useAnchor || t.useAnchor, this.constrainResolution_ = t.constrainResolution || !1, this
				.condition_ = t.condition || La, this.lastAnchor_ = null, this.startTime_ = void 0, this
				.timeoutId_, this.mode_ = void 0, this.trackpadEventGap_ = 400, this.trackpadTimeoutId_,
				this.trackpadDeltaPerZoom_ = 300, this.trackpadZoomBuffer_ = 1.5
		}

		function Rh(t) {
			yh.call(this, {
				handleEvent: dh
			});
			t = t || {};
			this.condition_ = t.condition || Na, this.delta_ = t.delta || 1, this.duration_ = void 0 !== t
				.duration ? t.duration : 100
		}

		function Ih(t) {
			var e = t || {},
				i = new Z,
				t = new So(-.005, .05, 100);
			return void 0 !== e.altShiftDragRotate && !e.altShiftDragRotate || i.push(new Ha), void 0 !== e
				.doubleClickZoom && !e.doubleClickZoom || i.push(new wa({
					delta: e.zoomDelta,
					duration: e.zoomDuration
				})), void 0 !== e.dragPan && !e.dragPan || i.push(new Ka({
					condition: e.onFocusOnly ? Ia : void 0,
					kinetic: t
				})), void 0 !== e.pinchRotate && !e.pinchRotate || i.push(new Eh), void 0 !== e.pinchZoom &&
				!e.pinchZoom || i.push(new Sh({
					constrainResolution: e.constrainResolution,
					duration: e.zoomDuration
				})), void 0 !== e.keyboard && !e.keyboard || (i.push(new ph), i.push(new mh({
					delta: e.zoomDelta,
					duration: e.zoomDuration
				}))), void 0 !== e.mouseWheelZoom && !e.mouseWheelZoom || i.push(new xh({
					condition: e.onFocusOnly ? Ia : void 0,
					constrainResolution: e.constrainResolution,
					duration: e.zoomDuration
				})), void 0 !== e.shiftDragZoom && !e.shiftDragZoom || i.push(new sh({
					duration: e.zoomDuration
				})), i
		}
		var Lh, bh, Ph, Mh, Fh, Oh, Ah, Nh, Gh, Dh, kh, jh, Uh = ((jh = O) && (al.__proto__ = jh), ((al
					.prototype = Object.create(jh && jh.prototype)).constructor = al).prototype.changed =
				function() {
					this.dispatchEvent(A.CHANGE)
				}, al.prototype.getExtent = function() {
					return this.extent
				}, al.prototype.getImage = function() {
					return a()
				}, al.prototype.getPixelRatio = function() {
					return this.pixelRatio_
				}, al.prototype.getResolution = function() {
					return this.resolution
				}, al.prototype.getState = function() {
					return this.state
				}, al.prototype.load = function() {
					a()
				}, al),
			Yh = {
				IDLE: 0,
				LOADING: 1,
				LOADED: 2,
				ERROR: 3
			},
			Bh = ((kh = Uh) && (sl.__proto__ = kh), ((sl.prototype = Object.create(kh && kh.prototype))
				.constructor = sl).prototype.getError = function() {
				return this.error_
			}, sl.prototype.handleLoad_ = function(t) {
				t ? (this.error_ = t, this.state = Yh.ERROR) : this.state = Yh.LOADED, this.changed()
			}, sl.prototype.load = function() {
				this.state == Yh.IDLE && (this.state = Yh.LOADING, this.changed(), this.loader_(this
					.handleLoad_.bind(this)))
			}, sl.prototype.getImage = function() {
				return this.canvas_
			}, sl),
			zh = {
				IMAGE: "IMAGE",
				TILE: "TILE",
				VECTOR_TILE: "VECTOR_TILE",
				VECTOR: "VECTOR"
			},
			Xh = "image",
			Vh = "vector",
			Wh = ((Dh = F) && (nl.__proto__ = Dh), (nl.prototype = Object.create(Dh && Dh.prototype))
				.constructor = nl),
			Kh = ((Gh = O) && (ol.__proto__ = Gh), ((ol.prototype = Object.create(Gh && Gh.prototype))
				.constructor = ol).prototype.canExpireCache = function() {
				return this.getCount() > this.highWaterMark
			}, ol.prototype.clear = function() {
				this.count_ = 0, this.entries_ = {}, this.oldest_ = null, this.newest_ = null, this
					.dispatchEvent(A.CLEAR)
			}, ol.prototype.containsKey = function(t) {
				return this.entries_.hasOwnProperty(t)
			}, ol.prototype.forEach = function(t, e) {
				for (var i = this.oldest_; i;) t.call(e, i.value_, i.key_, this), i = i.newer
			}, ol.prototype.get = function(t) {
				t = this.entries_[t];
				return $(void 0 !== t, 15), t === this.newest_ || (t === this.oldest_ ? (this.oldest_ =
						this.oldest_.newer, this.oldest_.older = null) : (t.newer.older = t.older, t
						.older.newer = t.newer), t.newer = null, t.older = this.newest_, this
					.newest_.newer = t, this.newest_ = t), t.value_
			}, ol.prototype.remove = function(t) {
				var e = this.entries_[t];
				return $(void 0 !== e, 15), e === this.newest_ ? (this.newest_ = e.older, this
						.newest_ && (this.newest_.newer = null)) : e === this.oldest_ ? (this.oldest_ =
						e.newer, this.oldest_ && (this.oldest_.older = null)) : (e.newer.older = e
						.older, e.older.newer = e.newer), delete this.entries_[t], --this.count_, e
					.value_
			}, ol.prototype.getCount = function() {
				return this.count_
			}, ol.prototype.getKeys = function() {
				for (var t = new Array(this.count_), e = 0, i = this.newest_; i; i = i.older) t[e++] = i
					.key_;
				return t
			}, ol.prototype.getValues = function() {
				for (var t = new Array(this.count_), e = 0, i = this.newest_; i; i = i.older) t[e++] = i
					.value_;
				return t
			}, ol.prototype.peekLast = function() {
				return this.oldest_.value_
			}, ol.prototype.peekLastKey = function() {
				return this.oldest_.key_
			}, ol.prototype.peekFirstKey = function() {
				return this.newest_.key_
			}, ol.prototype.pop = function() {
				var t = this.oldest_;
				return delete this.entries_[t.key_], t.newer && (t.newer.older = null), this.oldest_ = t
					.newer, this.oldest_ || (this.newest_ = null), --this.count_, t.value_
			}, ol.prototype.replace = function(t, e) {
				this.get(t), this.entries_[t].value_ = e
			}, ol.prototype.set = function(t, e) {
				$(!(t in this.entries_), 16);
				e = {
					key_: t,
					newer: null,
					older: this.newest_,
					value_: e
				};
				this.newest_ ? this.newest_.newer = e : this.oldest_ = e, this.newest_ = e, this
					.entries_[t] = e, ++this.count_
			}, ol.prototype.setSize = function(t) {
				this.highWaterMark = t
			}, ol.prototype.prune = function() {
				for (; this.canExpireCache();) this.pop()
			}, ol),
			Hh = [0, 0, 0, 1],
			Zh = [],
			qh = [0, 0, 0, 1],
			Jh = [0, 0, 0, 0],
			Qh = new Kh,
			$h = null,
			tl = {},
			el = (Ph = 60, Mh = {}, Fh = "32px ", Ah = (Oh = ["monospace", "serif"]).length, Nh =
				"wmytzilWMYTZIL@#/&?$%10",
				function(t) {
					var e = Zs(t);
					if (e)
						for (var i = 0, r = e.length; i < r; ++i) {
							var o = e[i];
							o in Mh || (Mh[o] = Ph, il(o) || void(Mh[o] = 0) === Lh && (Lh = setInterval(rl,
								32)))
						}
				});

		function il(t) {
			for (var e = hl(), i = 100; i <= 700; i += 300) {
				for (var r = i + " ", o = !0, n = 0; n < Ah; ++n) {
					var s = Oh[n];
					e.font = r + Fh + s, bh = e.measureText(Nh).width, t != s && (e.font = r + Fh + t +
						"," + s, s = e.measureText(Nh).width, o = o && s != bh)
				}
				if (o) return 1
			}
		}

		function rl() {
			var t, e = !0;
			for (t in Mh) Mh[t] < Ph && (il(t) ? (Mh[t] = Ph, _(tl), $h = null, Qh.clear()) : (++Mh[t],
				e = !1));
			e && (clearInterval(Lh), Lh = void 0)
		}

		function ol(t) {
			Gh.call(this), this.highWaterMark = void 0 !== t ? t : 2048, this.count_ = 0, this
				.entries_ = {}, this.oldest_ = null, this.newest_ = null
		}

		function nl(t, e, i, r, o) {
			Dh.call(this, t), this.vectorContext = e, this.frameState = i, this.context = r, this
				.glContext = o
		}

		function sl(t, e, i, r, o) {
			var n = void 0 !== o ? Yh.IDLE : Yh.LOADED;
			kh.call(this, t, e, i, n), this.loader_ = void 0 !== o ? o : null, this.canvas_ = r, this
				.error_ = null
		}

		function al(t, e, i, r) {
			jh.call(this), this.extent = t, this.pixelRatio_ = i, this.resolution = e, this.state = r
		}

		function hl() {
			return $h = $h || ds(1, 1)
		}
		var ll, ul, pl = (ul = tl, function(t) {
			var e = ul[t];
			return null == e && (ll || ((ll = document.createElement("span")).textContent = "M", ll
					.style.margin = ll.style.padding = "0 !important", ll.style.position =
					"absolute !important", ll.style.left = "-99999px !important"), ll.style
				.font = t, document.body.appendChild(ll), e = ul[t] = ll.offsetHeight, document
				.body.removeChild(ll)), e
		});

		function cl(t, e) {
			var i = hl();
			return t != i.font && (i.font = t), i.measureText(e).width
		}

		function dl(t, e, i, r) {
			0 !== e && (t.translate(i, r), t.rotate(e), t.translate(-i, -r))
		}
		var _l = [1, 0, 0, 1, 0, 0];

		function fl(t, e, i, r, o, n, s, a, h, l, u) {
			var p;
			1 != i && (p = t.globalAlpha, t.globalAlpha = p * i), e && t.setTransform.apply(t, e), t
				.drawImage(r, o, n, s, a, h, l, s * u, a * u), p && (t.globalAlpha = p), e && t.setTransform
				.apply(t, _l)
		}

		function gl(t) {
			return Array.isArray(t) ? so(t) : t
		}
		var yl = function() {};
		yl.prototype.drawCustom = function(t, e, i) {}, yl.prototype.drawGeometry = function(t) {}, yl
			.prototype.setStyle = function(t) {}, yl.prototype.drawCircle = function(t, e) {}, yl.prototype
			.drawFeature = function(t, e) {}, yl.prototype.drawGeometryCollection = function(t, e) {}, yl
			.prototype.drawLineString = function(t, e) {}, yl.prototype.drawMultiLineString = function(t,
			e) {}, yl.prototype.drawMultiPoint = function(t, e) {}, yl.prototype.drawMultiPolygon =
			function(t, e) {}, yl.prototype.drawPoint = function(t, e) {}, yl.prototype.drawPolygon =
			function(t, e) {}, yl.prototype.drawText = function(t, e) {}, yl.prototype.setFillStrokeStyle =
			function(t, e) {}, yl.prototype.setImageStyle = function(t, e) {}, yl.prototype.setTextStyle =
			function(t, e) {};
		var ml, vl = yl,
			xl = ((ml = vl) && (Sl.__proto__ = ml), ((Sl.prototype = Object.create(ml && ml.prototype))
				.constructor = Sl).prototype.drawImages_ = function(t, e, i, r) {
				if (this.image_) {
					var o = Zt(t, e, i, 2, this.transform_, this.pixelCoordinates_),
						n = this.context_,
						s = this.tmpLocalTransform_,
						i = n.globalAlpha;
					1 != this.imageOpacity_ && (n.globalAlpha = i * this.imageOpacity_);
					var a = this.imageRotation_;
					this.imageRotateWithView_ && (a += this.viewRotation_);
					for (var h = 0, l = o.length; h < l; h += 2) {
						var u, p, c = o[h] - this.imageAnchorX_,
							d = o[h + 1] - this.imageAnchorY_;
						0 === a && 1 == this.imageScale_ || (oi(s, u = c + this.imageAnchorX_, p = d +
								this.imageAnchorY_, this.imageScale_, this.imageScale_, a, -u, -p),
							n.setTransform.apply(n, s)), n.drawImage(this.image_, this
							.imageOriginX_, this.imageOriginY_, this.imageWidth_, this.imageHeight_,
							c, d, this.imageWidth_, this.imageHeight_)
					}
					0 === a && 1 == this.imageScale_ || n.setTransform(1, 0, 0, 1, 0, 0), 1 != this
						.imageOpacity_ && (n.globalAlpha = i)
				}
			}, Sl.prototype.drawText_ = function(t, e, i, r) {
				if (this.textState_ && "" !== this.text_) {
					this.textFillState_ && this.setContextFillState_(this.textFillState_), this
						.textStrokeState_ && this.setContextStrokeState_(this.textStrokeState_), this
						.setContextTextState_(this.textState_);
					var o = Zt(t, e, i, r, this.transform_, this.pixelCoordinates_),
						n = this.context_,
						s = this.textRotation_;
					for (this.textRotateWithView_ && (s += this.viewRotation_); e < i; e += r) {
						var a, h = o[e] + this.textOffsetX_,
							l = o[e + 1] + this.textOffsetY_;
						0 === s && 1 == this.textScale_ || (a = oi(this.tmpLocalTransform_, h, l, this
									.textScale_, this.textScale_, s, -h, -l), n.setTransform.apply(n,
								a)), this.textStrokeState_ && n.strokeText(this.text_, h, l), this
							.textFillState_ && n.fillText(this.text_, h, l)
					}
					0 === s && 1 == this.textScale_ || n.setTransform(1, 0, 0, 1, 0, 0)
				}
			}, Sl.prototype.moveToLineTo_ = function(t, e, i, r, o) {
				var n = this.context_,
					s = Zt(t, e, i, r, this.transform_, this.pixelCoordinates_);
				n.moveTo(s[0], s[1]);
				var a = s.length;
				o && (a -= 2);
				for (var h = 2; h < a; h += 2) n.lineTo(s[h], s[h + 1]);
				return o && n.closePath(), i
			}, Sl.prototype.drawRings_ = function(t, e, i, r) {
				for (var o = 0, n = i.length; o < n; ++o) e = this.moveToLineTo_(t, e, i[o], r, !0);
				return e
			}, Sl.prototype.drawCircle = function(t) {
				var e, i, r;
				zt(this.extent_, t.getExtent()) && ((this.fillState_ || this.strokeState_) && (this
					.fillState_ && this.setContextFillState_(this.fillState_), this
					.strokeState_ && this.setContextStrokeState_(this.strokeState_), i = (e =
						function(t, e, i) {
							var r = t.getFlatCoordinates();
							if (r) {
								t = t.getStride();
								return Zt(r, 0, r.length, t, e, i)
							}
							return null
						}(t, this.transform_, this.pixelCoordinates_))[2] - e[0], r = e[3] - e[
						1], i = Math.sqrt(i * i + r * r), (r = this.context_).beginPath(), r
					.arc(e[0], e[1], i, 0, 2 * Math.PI), this.fillState_ && r.fill(), this
					.strokeState_ && r.stroke()), "" !== this.text_ && this.drawText_(t
					.getCenter(), 0, 2, 2))
			}, Sl.prototype.setStyle = function(t) {
				this.setFillStrokeStyle(t.getFill(), t.getStroke()), this.setImageStyle(t.getImage()),
					this.setTextStyle(t.getText())
			}, Sl.prototype.drawGeometry = function(t) {
				switch (t.getType()) {
					case Ht.POINT:
						this.drawPoint(t);
						break;
					case Ht.LINE_STRING:
						this.drawLineString(t);
						break;
					case Ht.POLYGON:
						this.drawPolygon(t);
						break;
					case Ht.MULTI_POINT:
						this.drawMultiPoint(t);
						break;
					case Ht.MULTI_LINE_STRING:
						this.drawMultiLineString(t);
						break;
					case Ht.MULTI_POLYGON:
						this.drawMultiPolygon(t);
						break;
					case Ht.GEOMETRY_COLLECTION:
						this.drawGeometryCollection(t);
						break;
					case Ht.CIRCLE:
						this.drawCircle(t)
				}
			}, Sl.prototype.drawFeature = function(t, e) {
				t = e.getGeometryFunction()(t);
				t && zt(this.extent_, t.getExtent()) && (this.setStyle(e), this.drawGeometry(t))
			}, Sl.prototype.drawGeometryCollection = function(t) {
				for (var e = t.getGeometriesArray(), i = 0, r = e.length; i < r; ++i) this.drawGeometry(
					e[i])
			}, Sl.prototype.drawPoint = function(t) {
				var e = t.getFlatCoordinates(),
					t = t.getStride();
				this.image_ && this.drawImages_(e, 0, e.length, t), "" !== this.text_ && this.drawText_(
					e, 0, e.length, t)
			}, Sl.prototype.drawMultiPoint = function(t) {
				var e = t.getFlatCoordinates(),
					t = t.getStride();
				this.image_ && this.drawImages_(e, 0, e.length, t), "" !== this.text_ && this.drawText_(
					e, 0, e.length, t)
			}, Sl.prototype.drawLineString = function(t) {
				var e, i;
				zt(this.extent_, t.getExtent()) && (this.strokeState_ && (this.setContextStrokeState_(
						this.strokeState_), e = this.context_, i = t.getFlatCoordinates(), e
					.beginPath(), this.moveToLineTo_(i, 0, i.length, t.getStride(), !1), e
					.stroke()), "" !== this.text_ && (t = t.getFlatMidpoint(), this.drawText_(t,
					0, 2, 2)))
			}, Sl.prototype.drawMultiLineString = function(t) {
				var e = t.getExtent();
				if (zt(this.extent_, e)) {
					if (this.strokeState_) {
						this.setContextStrokeState_(this.strokeState_);
						var e = this.context_,
							i = t.getFlatCoordinates(),
							r = 0,
							o = t.getEnds(),
							n = t.getStride();
						e.beginPath();
						for (var s = 0, a = o.length; s < a; ++s) r = this.moveToLineTo_(i, r, o[s], n,
							!1);
						e.stroke()
					}
					"" !== this.text_ && (t = t.getFlatMidpoints(), this.drawText_(t, 0, t.length, 2))
				}
			}, Sl.prototype.drawPolygon = function(t) {
				var e;
				zt(this.extent_, t.getExtent()) && ((this.strokeState_ || this.fillState_) && (this
					.fillState_ && this.setContextFillState_(this.fillState_), this
					.strokeState_ && this.setContextStrokeState_(this.strokeState_), (e = this
						.context_).beginPath(), this.drawRings_(t.getOrientedFlatCoordinates(),
						0, t.getEnds(), t.getStride()), this.fillState_ && e.fill(), this
					.strokeState_ && e.stroke()), "" !== this.text_ && (t = t
					.getFlatInteriorPoint(), this.drawText_(t, 0, 2, 2)))
			}, Sl.prototype.drawMultiPolygon = function(t) {
				if (zt(this.extent_, t.getExtent())) {
					if (this.strokeState_ || this.fillState_) {
						this.fillState_ && this.setContextFillState_(this.fillState_), this
							.strokeState_ && this.setContextStrokeState_(this.strokeState_);
						var e = this.context_,
							i = t.getOrientedFlatCoordinates(),
							r = 0,
							o = t.getEndss(),
							n = t.getStride();
						e.beginPath();
						for (var s = 0, a = o.length; s < a; ++s) var h = o[s],
							r = this.drawRings_(i, r, h, n);
						this.fillState_ && e.fill(), this.strokeState_ && e.stroke()
					}
					"" !== this.text_ && (t = t.getFlatInteriorPoints(), this.drawText_(t, 0, t.length,
						2))
				}
			}, Sl.prototype.setContextFillState_ = function(t) {
				var e = this.context_,
					i = this.contextFillState_;
				i ? i.fillStyle != t.fillStyle && (i.fillStyle = e.fillStyle = t.fillStyle) : (e
					.fillStyle = t.fillStyle, this.contextFillState_ = {
						fillStyle: t.fillStyle
					})
			}, Sl.prototype.setContextStrokeState_ = function(t) {
				var e = this.context_,
					i = this.contextStrokeState_;
				i ? (i.lineCap != t.lineCap && (i.lineCap = e.lineCap = t.lineCap), lr && (_t(i
							.lineDash, t.lineDash) || e.setLineDash(i.lineDash = t.lineDash), i
						.lineDashOffset != t.lineDashOffset && (i.lineDashOffset = e
							.lineDashOffset = t.lineDashOffset)), i.lineJoin != t.lineJoin && (i
						.lineJoin = e.lineJoin = t.lineJoin), i.lineWidth != t.lineWidth && (i
						.lineWidth = e.lineWidth = t.lineWidth), i.miterLimit != t.miterLimit && (i
						.miterLimit = e.miterLimit = t.miterLimit), i.strokeStyle != t
					.strokeStyle && (i.strokeStyle = e.strokeStyle = t.strokeStyle)) : (e.lineCap =
					t.lineCap, lr && (e.setLineDash(t.lineDash), e.lineDashOffset = t
						.lineDashOffset), e.lineJoin = t.lineJoin, e.lineWidth = t.lineWidth, e
					.miterLimit = t.miterLimit, e.strokeStyle = t.strokeStyle, this
					.contextStrokeState_ = {
						lineCap: t.lineCap,
						lineDash: t.lineDash,
						lineDashOffset: t.lineDashOffset,
						lineJoin: t.lineJoin,
						lineWidth: t.lineWidth,
						miterLimit: t.miterLimit,
						strokeStyle: t.strokeStyle
					})
			}, Sl.prototype.setContextTextState_ = function(t) {
				var e = this.context_,
					i = this.contextTextState_,
					r = t.textAlign || "center";
				i ? (i.font != t.font && (i.font = e.font = t.font), i.textAlign != r && (i.textAlign =
					e.textAlign = r), i.textBaseline != t.textBaseline && (i.textBaseline = e
					.textBaseline = t.textBaseline)) : (e.font = t.font, e.textAlign = r, e
					.textBaseline = t.textBaseline, this.contextTextState_ = {
						font: t.font,
						textAlign: r,
						textBaseline: t.textBaseline
					})
			}, Sl.prototype.setFillStrokeStyle = function(t, e) {
				var i, r, o, n, s;
				t ? (s = t.getColor(), this.fillState_ = {
					fillStyle: gl(s || Hh)
				}) : this.fillState_ = null, e ? (i = e.getColor(), r = e.getLineCap(), o = e
					.getLineDash(), n = e.getLineDashOffset(), t = e.getLineJoin(), s = e
				.getWidth(), e = e.getMiterLimit(), this.strokeState_ = {
						lineCap: void 0 !== r ? r : "round",
						lineDash: o || Zh,
						lineDashOffset: n || 0,
						lineJoin: void 0 !== t ? t : "round",
						lineWidth: this.pixelRatio_ * (void 0 !== s ? s : 1),
						miterLimit: void 0 !== e ? e : 10,
						strokeStyle: gl(i || qh)
					}) : this.strokeState_ = null
			}, Sl.prototype.setImageStyle = function(t) {
				var e, i, r, o;
				t ? (e = t.getAnchor(), i = t.getImage(1), r = t.getOrigin(), o = t.getSize(), this
					.imageAnchorX_ = e[0], this.imageAnchorY_ = e[1], this.imageHeight_ = o[1], this
					.image_ = i, this.imageOpacity_ = t.getOpacity(), this.imageOriginX_ = r[0],
					this.imageOriginY_ = r[1], this.imageRotateWithView_ = t.getRotateWithView(),
					this.imageRotation_ = t.getRotation(), this.imageScale_ = t.getScale() * this
					.pixelRatio_, this.imageWidth_ = o[0]) : this.image_ = null
			}, Sl.prototype.setTextStyle = function(t) {
				var e, i, r, o, n, s, a, h, l;
				t ? ((e = t.getFill()) ? (i = e.getColor(), this.textFillState_ = {
							fillStyle: gl(i || Hh)
						}) : this.textFillState_ = null, (i = t.getStroke()) ? (l = i.getColor(), r = i
							.getLineCap(), o = i.getLineDash(), n = i.getLineDashOffset(), s = i
							.getLineJoin(), a = i.getWidth(), h = i.getMiterLimit(), this
							.textStrokeState_ = {
								lineCap: void 0 !== r ? r : "round",
								lineDash: o || Zh,
								lineDashOffset: n || 0,
								lineJoin: void 0 !== s ? s : "round",
								lineWidth: void 0 !== a ? a : 1,
								miterLimit: void 0 !== h ? h : 10,
								strokeStyle: gl(l || qh)
							}) : this.textStrokeState_ = null, i = t.getFont(), r = t.getOffsetX(), o =
						t.getOffsetY(), n = t.getRotateWithView(), s = t.getRotation(), a = t
					.getScale(), h = t.getText(), l = t.getTextAlign(), t = t.getTextBaseline(), this
						.textState_ = {
							font: void 0 !== i ? i : "10px sans-serif",
							textAlign: void 0 !== l ? l : "center",
							textBaseline: void 0 !== t ? t : "middle"
						}, this.text_ = void 0 !== h ? h : "", this.textOffsetX_ = void 0 !== r ? this
						.pixelRatio_ * r : 0, this.textOffsetY_ = void 0 !== o ? this.pixelRatio_ * o :
						0, this.textRotateWithView_ = void 0 !== n && n, this.textRotation_ = void 0 !==
						s ? s : 0, this.textScale_ = this.pixelRatio_ * (void 0 !== a ? a : 1)) : this
					.text_ = ""
			}, Sl),
			El = function() {
				this.cache_ = {}, this.cacheSize_ = 0, this.maxCacheSize_ = 32
			};

		function Sl(t, e, i, r, o) {
			ml.call(this), this.context_ = t, this.pixelRatio_ = e, this.extent_ = i, this.transform_ = r,
				this.viewRotation_ = o, this.contextFillState_ = null, this.contextStrokeState_ = null, this
				.contextTextState_ = null, this.fillState_ = null, this.strokeState_ = null, this.image_ =
				null, this.imageAnchorX_ = 0, this.imageAnchorY_ = 0, this.imageHeight_ = 0, this
				.imageOpacity_ = 0, this.imageOriginX_ = 0, this.imageOriginY_ = 0, this
				.imageRotateWithView_ = !1, this.imageRotation_ = 0, this.imageScale_ = 0, this
				.imageWidth_ = 0, this.text_ = "", this.textOffsetX_ = 0, this.textOffsetY_ = 0, this
				.textRotateWithView_ = !1, this.textRotation_ = 0, this.textScale_ = 0, this
				.textFillState_ = null, this.textStrokeState_ = null, this.textState_ = null, this
				.pixelCoordinates_ = [], this.tmpLocalTransform_ = [1, 0, 0, 1, 0, 0]
		}

		function Cl(t, e, i) {
			return e + ":" + t + ":" + (i ? to(i) : "null")
		}
		El.prototype.clear = function() {
			this.cache_ = {}, this.cacheSize_ = 0
		}, El.prototype.expire = function() {
			if (this.cacheSize_ > this.maxCacheSize_) {
				var t, e = 0;
				for (t in this.cache_) {
					var i = this.cache_[t];
					0 != (3 & e++) || i.hasListener() || (delete this.cache_[t], --this.cacheSize_)
				}
			}
		}, El.prototype.get = function(t, e, i) {
			i = Cl(t, e, i);
			return i in this.cache_ ? this.cache_[i] : null
		}, El.prototype.set = function(t, e, i, r) {
			i = Cl(t, e, i);
			this.cache_[i] = r, ++this.cacheSize_
		}, El.prototype.setSize = function(t) {
			this.maxCacheSize_ = t, this.expire()
		};
		var wl = new El;

		function Tl(t, e) {
			wl.expire()
		}

		function Rl(t, e) {
			return t.zIndex - e.zIndex
		}
		var Il, Ll, bl, Pl, Ml, Fl, Ol = ((Fl = T) && (Vl.__proto__ = Fl), ((Vl.prototype = Object.create(
				Fl && Fl.prototype)).constructor = Vl).prototype.dispatchRenderEvent = function(t, e) {
				a()
			}, Vl.prototype.registerLayerRenderers = function(t) {
				this.layerRendererConstructors_.push.apply(this.layerRendererConstructors_, t)
			}, Vl.prototype.calculateMatrices2D = function(t) {
				var e = t.viewState,
					i = t.coordinateToPixelTransform,
					r = t.pixelToCoordinateTransform;
				oi(i, t.size[0] / 2, t.size[1] / 2, 1 / e.resolution, -1 / e.resolution, -e.rotation, -e
					.center[0], -e.center[1]), ni($e(r, i))
			}, Vl.prototype.removeLayerRenderers = function() {
				for (var t in this.layerRenderers_) this.removeLayerRendererByKey_(t).dispose()
			}, Vl.prototype.forEachFeatureAtCoordinate = function(t, r, e, o, n, i, s) {
				var a, h = r.viewState,
					l = h.resolution;

				function u(t, e) {
					var i = r.layerStates[ct(e)].managed;
					if (!(ct(t) in r.skippedFeatureUids) || i) return o.call(n, t, i ? e : null)
				}
				var p, c = h.projection,
					d = t;
				c.canWrapX() && (h = Bt(p = c.getExtent()), ((c = t[0]) < p[0] || c > p[2]) && (d = [c +
					h * Math.ceil((p[0] - c) / h), t[1]
				]));
				for (var _ = r.layerStatesArray, f = _.length - 1; 0 <= f; --f) {
					var g = _[f],
						y = g.layer;
					if (Js(g, l) && i.call(s, y)) {
						g = this.getLayerRenderer(y), y = y.getSource();
						if (y && (a = g.forEachFeatureAtCoordinate(y.getWrapX() ? d : t, r, e, u)), a)
							return a
					}
				}
			}, Vl.prototype.forEachLayerAtPixel = function(t, e, i, r, o, n, s) {
				return a()
			}, Vl.prototype.hasFeatureAtCoordinate = function(t, e, i, r, o) {
				return void 0 !== this.forEachFeatureAtCoordinate(t, e, i, R, this, r, o)
			}, Vl.prototype.getLayerRenderer = function(t) {
				var e = ct(t);
				if (e in this.layerRenderers_) return this.layerRenderers_[e];
				for (var i, r = 0, o = this.layerRendererConstructors_.length; r < o; ++r) {
					var n = this.layerRendererConstructors_[r];
					if (n.handles(t)) {
						i = n.create(this, t);
						break
					}
				}
				if (!i) throw new Error("Unable to create renderer for layer: " + t.getType());
				return this.layerRenderers_[e] = i, this.layerRendererListeners_[e] = E(i, A.CHANGE,
					this.handleLayerRendererChange_, this), i
			}, Vl.prototype.getLayerRendererByKey = function(t) {
				return this.layerRenderers_[t]
			}, Vl.prototype.getLayerRenderers = function() {
				return this.layerRenderers_
			}, Vl.prototype.getMap = function() {
				return this.map_
			}, Vl.prototype.handleLayerRendererChange_ = function() {
				this.map_.render()
			}, Vl.prototype.removeLayerRendererByKey_ = function(t) {
				var e = this.layerRenderers_[t];
				return delete this.layerRenderers_[t], S(this.layerRendererListeners_[t]), delete this
					.layerRendererListeners_[t], e
			}, Vl.prototype.removeUnusedLayerRenderers_ = function(t, e) {
				for (var i in this.layerRenderers_) e && i in e.layerStates || this
					.removeLayerRendererByKey_(i).dispose()
			}, Vl.prototype.renderFrame = function(t) {
				a()
			}, Vl.prototype.scheduleExpireIconCache = function(t) {
				t.postRenderFunctions.push(Tl)
			}, Vl.prototype.scheduleRemoveUnusedLayerRenderers = function(t) {
				for (var e in this.layerRenderers_)
					if (!(e in t.layerStates)) return void t.postRenderFunctions.push(this
						.removeUnusedLayerRenderers_.bind(this))
			}, Vl),
			Al = [],
			Nl = ((Ml = Ol) && (Xl.__proto__ = Ml), ((Xl.prototype = Object.create(Ml && Ml.prototype))
				.constructor = Xl).prototype.dispatchRenderEvent = function(t, e) {
				var i, r, o, n, s = this.getMap(),
					a = this.context_;
				s.hasListener(t) && (i = e.extent, r = e.pixelRatio, n = e.viewState.rotation, o = this
					.getTransform(e), n = new xl(a, r, i, o, n), a = new Wh(t, n, e, a, null), s
					.dispatchEvent(a))
			}, Xl.prototype.getTransform = function(t) {
				var e = t.viewState,
					i = this.canvas_.width / 2,
					r = this.canvas_.height / 2,
					o = t.pixelRatio / e.resolution,
					n = -o,
					s = -e.rotation,
					t = -e.center[0],
					e = -e.center[1];
				return oi(this.transform_, i, r, o, n, s, t, e)
			}, Xl.prototype.renderFrame = function(t) {
				if (t) {
					var e = this.context_,
						i = t.pixelRatio,
						r = Math.round(t.size[0] * i),
						o = Math.round(t.size[1] * i);
					this.canvas_.width != r || this.canvas_.height != o ? (this.canvas_.width = r, this
						.canvas_.height = o) : e.clearRect(0, 0, r, o);
					i = t.viewState.rotation;
					this.calculateMatrices2D(t), this.dispatchRenderEvent(Zr, t);
					var n = t.layerStatesArray;
					ht(n, Rl), i && (e.save(), dl(e, i, r / 2, o / 2));
					for (var s = t.viewState.resolution, a = 0, h = n.length; a < h; ++a) {
						var l = n[a],
							u = l.layer,
							u = this.getLayerRenderer(u);
						Js(l, s) && l.sourceState == bs && u.prepareFrame(t, l) && u.composeFrame(t, l,
							e)
					}
					i && e.restore(), this.dispatchRenderEvent(Hr, t), this.renderedVisible_ || (this
							.canvas_.style.display = "", this.renderedVisible_ = !0), this
						.scheduleRemoveUnusedLayerRenderers(t), this.scheduleExpireIconCache(t)
				} else this.renderedVisible_ && (this.canvas_.style.display = "none", this
					.renderedVisible_ = !1)
			}, Xl.prototype.forEachLayerAtPixel = function(t, e, i, r, o, n, s) {
				for (var a, h = e.viewState.resolution, l = e.layerStatesArray, u = l.length, p = ti(e
						.pixelToCoordinateTransform, t.slice()), c = u - 1; 0 <= c; --c) {
					var d = l[c],
						_ = d.layer;
					if (Js(d, h) && n.call(s, _) && (a = this.getLayerRenderer(_)
							.forEachLayerAtCoordinate(p, e, i, r, o))) return a
				}
			}, Xl.prototype.registerLayerRenderers = function(t) {
				Ml.prototype.registerLayerRenderers.call(this, t);
				for (var e = 0, i = t.length; e < i; ++e) {
					var r = t[e];
					ot(Al, r) || Al.push(r)
				}
			}, Xl),
			Gl = ((Pl = k) && (zl.__proto__ = Pl), ((zl.prototype = Object.create(Pl && Pl.prototype))
					.constructor = zl).prototype.createLoadedTileFinder = function(i, r, o) {
					return function(e, t) {
						return i.forEachLoadedTile(r, e, t, function(t) {
							o[e] || (o[e] = {}), o[e][t.tileCoord.toString()] = t
						})
					}
				}, zl.prototype.forEachFeatureAtCoordinate = function(t, e, i, r) {}, zl.prototype
				.getLayer = function() {
					return this.layer_
				}, zl.prototype.handleImageChange_ = function(t) {
					t.target.getState() === Yh.LOADED && this.renderIfReadyAndVisible()
				}, zl.prototype.hasFeatureAtCoordinate = function(t, e) {
					return !1
				}, zl.prototype.loadImage = function(t) {
					var e = t.getState();
					return e != Yh.LOADED && e != Yh.ERROR && E(t, A.CHANGE, this.handleImageChange_, this),
						e == Yh.IDLE && (t.load(), e = t.getState()), e == Yh.LOADED
				}, zl.prototype.renderIfReadyAndVisible = function() {
					var t = this.getLayer();
					t.getVisible() && t.getSourceState() == bs && this.changed()
				}, zl.prototype.scheduleExpireCache = function(t, e) {
					e.canExpireCache() && (e = function(t, e, i) {
						var r = ct(t);
						r in i.usedTiles && t.expireCache(i.viewState.projection, i.usedTiles[r])
					}.bind(null, e), t.postRenderFunctions.push(e))
				}, zl.prototype.updateUsedTiles = function(t, e, i, r) {
					e = ct(e), i = i.toString();
					e in t ? i in t[e] ? t[e][i].extend(r) : t[e][i] = r : (t[e] = {}, t[e][i] = r)
				}, zl.prototype.manageTilePyramid = function(t, e, i, r, o, n, s, a, h, l) {
					var u = ct(e);
					u in t.wantedTiles || (t.wantedTiles[u] = {});
					for (var p, c, d, _, f, g = t.wantedTiles[u], y = t.tileQueue, m = i.getMinZoom(); m <=
						s; ++m)
						for (c = i.getTileRangeForExtentAndZ(n, m, c), d = i.getResolution(m), _ = c
							.minX; _ <= c.maxX; ++_)
							for (f = c.minY; f <= c.maxY; ++f) s - m <= a ? ((p = e.getTile(m, _, f, r, o))
								.getState() == Bn.IDLE && (g[p.getKey()] = !0, y.isKeyQueued(p
								.getKey()) || y.enqueue([p, u, i.getTileCoordCenter(p.tileCoord), d])),
								void 0 !== h && h.call(l, p)) : e.useTile(m, _, f, o)
				}, zl),
			Dl = ((bl = Gl) && (Bl.__proto__ = bl), ((Bl.prototype = Object.create(bl && bl.prototype))
				.constructor = Bl).prototype.clip = function(t, e, i) {
				var r = e.pixelRatio,
					o = e.size[0] * r,
					n = e.size[1] * r,
					s = e.viewState.rotation,
					a = Ut(i),
					h = Yt(i),
					l = Nt(i),
					i = At(i);
				ti(e.coordinateToPixelTransform, a), ti(e.coordinateToPixelTransform, h), ti(e
						.coordinateToPixelTransform, l), ti(e.coordinateToPixelTransform, i), t.save(),
					dl(t, -s, o / 2, n / 2), t.beginPath(), t.moveTo(a[0] * r, a[1] * r), t.lineTo(h[
						0] * r, h[1] * r), t.lineTo(l[0] * r, l[1] * r), t.lineTo(i[0] * r, i[1] * r), t
					.clip(), dl(t, s, o / 2, n / 2)
			}, Bl.prototype.dispatchComposeEvent_ = function(t, e, i, r) {
				var o, n, s, a = this.getLayer();
				a.hasListener(t) && (o = i.size[0] * i.pixelRatio, n = i.size[1] * i.pixelRatio, dl(e, -
						(s = i.viewState.rotation), o / 2, n / 2), r = void 0 !== r ? r : this
					.getTransform(i, 0), r = new xl(e, i.pixelRatio, i.extent, r, i.viewState
						.rotation), i = new Wh(t, r, i, e, null), a.dispatchEvent(i), dl(e, s, o /
						2, n / 2))
			}, Bl.prototype.forEachLayerAtCoordinate = function(t, e, i, r, o) {
				return this.forEachFeatureAtCoordinate(t, e, i, R) ? r.call(o, this.getLayer(), null) :
					void 0
			}, Bl.prototype.postCompose = function(t, e, i, r) {
				this.dispatchComposeEvent_(Hr, t, e, r)
			}, Bl.prototype.preCompose = function(t, e, i) {
				this.dispatchComposeEvent_(Zr, t, e, i)
			}, Bl.prototype.dispatchRenderEvent = function(t, e, i) {
				this.dispatchComposeEvent_(qr, t, e, i)
			}, Bl.prototype.getTransform = function(t, e) {
				var i = t.viewState,
					r = t.pixelRatio,
					o = r * t.size[0] / 2,
					n = r * t.size[1] / 2,
					s = r / i.resolution,
					t = -s,
					r = -i.rotation,
					e = -i.center[0] + e,
					i = -i.center[1];
				return oi(this.transform_, o, n, s, t, r, e, i)
			}, Bl.prototype.composeFrame = function(t, e, i) {
				a()
			}, Bl.prototype.prepareFrame = function(t, e) {
				return a()
			}, Bl),
			kl = ((Ll = Dl) && (Yl.__proto__ = Ll), ((Yl.prototype = Object.create(Ll && Ll.prototype))
				.constructor = Yl).prototype.composeFrame = function(t, e, i) {
				this.preCompose(i, t);
				var r, o, n, s, a, h, l = this.getImage();
				l && ((r = void 0 !== (a = e.extent) && !xt(a, t.extent) && zt(a, t.extent)) && this
					.clip(i, t, a), h = this.getImageTransform(), o = i.globalAlpha, i.globalAlpha =
					e.opacity, n = h[4], s = h[5], a = l.width * h[0], h = l.height * h[3], .5 <=
					a && .5 <= h && i.drawImage(l, 0, 0, +l.width, +l.height, Math.round(n), Math
						.round(s), Math.round(a), Math.round(h)), i.globalAlpha = o, r && i
					.restore()), this.postCompose(i, t, e)
			}, Yl.prototype.getImage = function() {
				return a()
			}, Yl.prototype.getImageTransform = function() {
				return a()
			}, Yl.prototype.forEachLayerAtCoordinate = function(t, e, i, r, o) {
				if (this.getImage()) {
					t = ti(this.coordinateToCanvasPixelTransform, t.slice());
					Gr(t, e.viewState.resolution / this.renderedResolution), this.hitCanvasContext_ || (
						this.hitCanvasContext_ = ds(1, 1)), this.hitCanvasContext_.clearRect(0, 0,
						1, 1), this.hitCanvasContext_.drawImage(this.getImage(), t[0], t[1], 1, 1,
						0, 0, 1, 1);
					t = this.hitCanvasContext_.getImageData(0, 0, 1, 1).data;
					return 0 < t[3] ? r.call(o, this.getLayer(), t) : void 0
				}
			}, Yl),
			jl = ((Il = kl) && (Ul.__proto__ = Il), ((Ul.prototype = Object.create(Il && Il.prototype))
				.constructor = Ul).prototype.disposeInternal = function() {
				this.vectorRenderer_ && this.vectorRenderer_.dispose(), Il.prototype.disposeInternal
					.call(this)
			}, Ul.prototype.getImage = function() {
				return this.image_ ? this.image_.getImage() : null
			}, Ul.prototype.getImageTransform = function() {
				return this.imageTransform_
			}, Ul.prototype.prepareFrame = function(t, e) {
				var i, r, o, n, s, a, h = t.pixelRatio,
					l = t.size,
					u = t.viewState,
					p = u.center,
					c = u.resolution,
					d = this.getLayer().getSource(),
					_ = t.viewHints,
					f = this.vectorRenderer_,
					g = t.extent;
				return f || void 0 === e.extent || (g = jt(g, e.extent)), _[0] || _[1] || Xt(g) || (s =
					u.projection, i = this.skippedFeatures_, (a = f ? (r = f.context, o = y({}, t, {
						size: [Bt(g) / c, kt(g) / c],
						viewState: y({}, t.viewState, {
							rotation: 0
						})
					}), n = Object.keys(o.skippedFeatureUids).sort(), new Bh(g, c, h, r
						.canvas,
						function(t) {
							!f.prepareFrame(o, e) || !f.replayGroupChanged && _t(i, n) || (r
								.canvas.width = o.size[0] * h, r.canvas.height = o.size[
									1] * h, f.compose(r, o, e), i = n, t())
						})) : d.getImage(g, c, h, s)) && this.loadImage(a) && (this.image_ = a, this
						.skippedFeatures_ = i)), this.image_ && (d = (a = this.image_).getExtent(),
					g = a.getResolution(), s = a.getPixelRatio(), a = h * g / (c * s), d = oi(this
						.imageTransform_, h * l[0] / 2, h * l[1] / 2, a, a, 0, s * (d[0] - p[0]) /
						g, s * (p[1] - d[3]) / g), oi(this.coordinateToCanvasPixelTransform, h * l[
						0] / 2 - d[4], h * l[1] / 2 - d[5], h / c, -h / c, 0, -p[0], -p[1]), this
					.renderedResolution = g * h / s), !!this.image_
			}, Ul.prototype.forEachFeatureAtCoordinate = function(t, e, i, r) {
				return this.vectorRenderer_ ? this.vectorRenderer_.forEachFeatureAtCoordinate(t, e, i,
					r) : Il.prototype.forEachFeatureAtCoordinate.call(this, t, e, i, r)
			}, Ul);

		function Ul(t) {
			if (Il.call(this, t), this.image_ = null, this.imageTransform_ = [1, 0, 0, 1, 0, 0], this
				.skippedFeatures_ = [], this.vectorRenderer_ = null, t.getType() === zh.VECTOR)
				for (var e = 0, i = Al.length; e < i; ++e) {
					var r = Al[e];
					if (r !== Ul && r.handles(t)) {
						this.vectorRenderer_ = new r(t);
						break
					}
				}
		}

		function Yl(t) {
			Ll.call(this, t), this.coordinateToCanvasPixelTransform = [1, 0, 0, 1, 0, 0], this
				.hitCanvasContext_ = null
		}

		function Bl(t) {
			bl.call(this, t), this.renderedResolution, this.transform_ = [1, 0, 0, 1, 0, 0]
		}

		function zl(t) {
			Pl.call(this), this.layer_ = t
		}

		function Xl(t) {
			Ml.call(this, t);
			t = t.getViewport();
			this.context_ = ds(), this.canvas_ = this.context_.canvas, this.canvas_.style.width = "100%",
				this.canvas_.style.height = "100%", this.canvas_.style.display = "block", this.canvas_
				.className = Ws, t.insertBefore(this.canvas_, t.childNodes[0] || null), this
				.renderedVisible_ = !0, this.transform_ = [1, 0, 0, 1, 0, 0]
		}

		function Vl(t) {
			Fl.call(this), this.map_ = t, this.layerRenderers_ = {}, this.layerRendererListeners_ = {}, this
				.layerRendererConstructors_ = []
		}
		jl.handles = function(t) {
			return t.getType() === zh.IMAGE || t.getType() === zh.VECTOR && t.getRenderMode() === Xh
		}, jl.create = function(t, e) {
			return new jl(e)
		};
		var Wl = jl,
			Kl = function(t, e, i, r) {
				this.minX = t, this.maxX = e, this.minY = i, this.maxY = r
			};

		function Hl(t, e, i, r, o) {
			return void 0 !== o ? (o.minX = t, o.maxX = e, o.minY = i, o.maxY = r, o) : new Kl(t, e, i, r)
		}
		Kl.prototype.contains = function(t) {
			return this.containsXY(t[1], t[2])
		}, Kl.prototype.containsTileRange = function(t) {
			return this.minX <= t.minX && t.maxX <= this.maxX && this.minY <= t.minY && t.maxY <= this
				.maxY
		}, Kl.prototype.containsXY = function(t, e) {
			return this.minX <= t && t <= this.maxX && this.minY <= e && e <= this.maxY
		}, Kl.prototype.equals = function(t) {
			return this.minX == t.minX && this.minY == t.minY && this.maxX == t.maxX && this.maxY == t
				.maxY
		}, Kl.prototype.extend = function(t) {
			t.minX < this.minX && (this.minX = t.minX), t.maxX > this.maxX && (this.maxX = t.maxX), t
				.minY < this.minY && (this.minY = t.minY), t.maxY > this.maxY && (this.maxY = t.maxY)
		}, Kl.prototype.getHeight = function() {
			return this.maxY - this.minY + 1
		}, Kl.prototype.getSize = function() {
			return [this.getWidth(), this.getHeight()]
		}, Kl.prototype.getWidth = function() {
			return this.maxX - this.minX + 1
		}, Kl.prototype.intersects = function(t) {
			return this.minX <= t.maxX && this.maxX >= t.minX && this.minY <= t.maxY && this.maxY >= t
				.minY
		};
		var Zl, ql = Kl,
			Jl = ((Zl = kl) && (Ql.__proto__ = Zl), ((Ql.prototype = Object.create(Zl && Zl.prototype))
				.constructor = Ql).prototype.isDrawableTile_ = function(t) {
				var e = this.getLayer(),
					t = t.getState(),
					e = e.getUseInterimTilesOnError();
				return t == Bn.LOADED || t == Bn.EMPTY || t == Bn.ERROR && !e
			}, Ql.prototype.getTile = function(t, e, i, r, o) {
				var n = this.getLayer(),
					o = n.getSource().getTile(t, e, i, r, o);
				return o.getState() == Bn.ERROR && (n.getUseInterimTilesOnError() ? 0 < n
					.getPreload() && (this.newTiles_ = !0) : o.setState(Bn.LOADED)), this
					.isDrawableTile_(o) || (o = o.getInterimTile()), o
			}, Ql.prototype.prepareFrame = function(t, e) {
				var i = t.pixelRatio,
					r = t.size,
					o = t.viewState,
					n = o.projection,
					s = o.resolution,
					a = o.center,
					h = this.getLayer(),
					l = h.getSource(),
					u = l.getRevision(),
					p = l.getTileGridForProjection(n),
					c = p.getZForResolution(s, this.zDirection),
					d = p.getResolution(c),
					_ = Math.round(s / d) || 1,
					f = t.extent;
				if (void 0 !== e.extent && (f = jt(f, e.extent)), Xt(f)) return !1;
				var g = p.getTileRangeForExtentAndZ(f, c),
					y = p.getTileRangeExtent(c, g),
					m = l.getTilePixelRatio(i),
					v = {};
				v[c] = {};
				var x, E, S, C = this.createLoadedTileFinder(l, n, v),
					w = t.viewHints,
					T = w[0] || w[1],
					R = this.tmpExtent,
					I = this.tmpTileRange_;
				for (this.newTiles_ = !1, E = g.minX; E <= g.maxX; ++E)
					for (S = g.minY; S <= g.maxY; ++S)
						if (!(16 < Date.now() - t.time && T)) {
							if (x = this.getTile(c, E, S, i, n), this.isDrawableTile_(x)) {
								var L = ct(this);
								if (x.getState() == Bn.LOADED && (b = (v[c][x.tileCoord.toString()] = x)
										.inTransition(L), this.newTiles_ || !b && -1 !== this
										.renderedTiles.indexOf(x) || (this.newTiles_ = !0)), 1 === x
									.getAlpha(L, t.time)) continue
							}
							var b = p.getTileCoordChildTileRange(x.tileCoord, I, R),
								L = !1;
							b && (L = C(c + 1, b)), L || p.forEachTileCoordParentTileRange(x.tileCoord,
								C, null, I, R)
						} var P = d * i / m * _;
				if (!(this.renderedResolution && 16 < Date.now() - t.time && T) && (this.newTiles_ || !
						this.renderedExtent_ || !xt(this.renderedExtent_, f) || this.renderedRevision !=
						u || _ != this.oversampling_ || !T && P != this.renderedResolution)) {
					var M = this.context;
					M && (o = l.getTilePixelSize(c, i, n), w = Math.round(g.getWidth() * o[0] / _), P =
						Math.round(g.getHeight() * o[1] / _), (o = M.canvas).width != w || o
						.height != P ? (this.oversampling_ = _, o.width = w, o.height = P) : (this
							.renderedExtent_ && !Lt(y, this.renderedExtent_) && M.clearRect(0, 0, w,
								P), _ = this.oversampling_)), this.renderedTiles.length = 0;
					var F, O, A, N, G, D, k, j, U, Y = Object.keys(v).map(Number);
					for (Y.sort(function(t, e) {
							return t === c ? 1 : e === c ? -1 : e < t ? 1 : t < e ? -1 : 0
						}), N = 0, G = Y.length; N < G; ++N)
						for (var B in A = Y[N], O = l.getTilePixelSize(A, i, n), F = p.getResolution(
								A) / d, D = m * l.getGutterForProjection(n), k = v[A]) x = k[B], E = ((
								U = p.getTileCoordExtent(x.getTileCoord(), R))[0] - y[0]) / d * m / _,
							S = (y[3] - U[3]) / d * m / _, j = O[0] * F / _, U = O[1] * F / _, this
							.drawTileImage(x, t, e, E, S, j, U, D, c === A), this.renderedTiles.push(x);
					this.renderedRevision = u, this.renderedResolution = d * i / m * _, this
						.renderedExtent_ = y
				}
				u = this.renderedResolution / s, u = oi(this.imageTransform_, i * r[0] / 2, i * r[1] /
					2, u, u, 0, (this.renderedExtent_[0] - a[0]) / this.renderedResolution * i, (a[
						1] - this.renderedExtent_[3]) / this.renderedResolution * i);
				return oi(this.coordinateToCanvasPixelTransform, i * r[0] / 2 - u[4], i * r[1] / 2 - u[
						5], i / s, -i / s, 0, -a[0], -a[1]), this.updateUsedTiles(t.usedTiles, l, c, g),
					this.manageTilePyramid(t, l, p, i, n, f, c, h.getPreload()), this
					.scheduleExpireCache(t, l), 0 < this.renderedTiles.length
			}, Ql.prototype.drawTileImage = function(t, e, i, r, o, n, s, a, h) {
				var l, u, p, c = this.getTileImage(t);
				c && (l = ct(this), u = h ? t.getAlpha(l, e.time) : 1, p = this.getLayer().getSource(),
					1 !== u || p.getOpaque(e.viewState.projection) || this.context.clearRect(r, o,
						n, s), (p = u !== this.context.globalAlpha) && (this.context.save(), this
						.context.globalAlpha = u), this.context.drawImage(c, a, a, c.width - 2 * a,
						c.height - 2 * a, r, o, n, s), p && this.context.restore(), 1 !== u ? e
					.animate = !0 : h && t.endTransition(l))
			}, Ql.prototype.getImage = function() {
				var t = this.context;
				return t ? t.canvas : null
			}, Ql.prototype.getImageTransform = function() {
				return this.imageTransform_
			}, Ql.prototype.getTileImage = function(t) {
				return t.getImage()
			}, Ql);

		function Ql(t, e) {
			Zl.call(this, t), this.context = e ? null : ds(), this.oversampling_, this.renderedExtent_ =
				null, this.renderedRevision, this.renderedTiles = [], this.newTiles_ = !1, this
				.tmpExtent = [1 / 0, 1 / 0, -1 / 0, -1 / 0], this.tmpTileRange_ = new ql(0, 0, 0, 0), this
				.imageTransform_ = [1, 0, 0, 1, 0, 0], this.zDirection = 0
		}
		Jl.handles = function(t) {
			return t.getType() === zh.TILE
		}, Jl.create = function(t, e) {
			return new Jl(e)
		}, Jl.prototype.getLayer;
		var $l = Jl,
			tu = e(0),
			eu = e.n(tu),
			iu = function() {};
		iu.prototype.getReplay = function(t, e) {
			return a()
		}, iu.prototype.isEmpty = function() {
			return a()
		}, iu.prototype.addDeclutter = function(t) {
			return a()
		};
		var ru = iu,
			ou = {
				CIRCLE: "Circle",
				DEFAULT: "Default",
				IMAGE: "Image",
				LINE_STRING: "LineString",
				POLYGON: "Polygon",
				TEXT: "Text"
			};
		var nu, su, au, hu, lu = {
				BEGIN_GEOMETRY: 0,
				BEGIN_PATH: 1,
				CIRCLE: 2,
				CLOSE_PATH: 3,
				CUSTOM: 4,
				DRAW_CHARS: 5,
				DRAW_IMAGE: 6,
				END_GEOMETRY: 7,
				FILL: 8,
				MOVE_TO_LINE_TO: 9,
				SET_FILL_STYLE: 10,
				SET_STROKE_STYLE: 11,
				STROKE: 12
			},
			uu = [lu.FILL],
			pu = [lu.STROKE],
			cu = [lu.BEGIN_PATH],
			du = [lu.CLOSE_PATH],
			_u = lu,
			fu = [ou.POLYGON, ou.CIRCLE, ou.LINE_STRING, ou.IMAGE, ou.TEXT, ou.DEFAULT],
			gu = {
				left: 0,
				end: 0,
				center: .5,
				right: 1,
				start: 1,
				top: 0,
				middle: .5,
				hanging: .2,
				alphabetic: .8,
				ideographic: .8,
				bottom: 1
			},
			yu = [1 / 0, 1 / 0, -1 / 0, -1 / 0],
			mu = [1, 0, 0, 1, 0, 0],
			vu = ((hu = vl) && (Ru.__proto__ = hu), ((Ru.prototype = Object.create(hu && hu.prototype))
				.constructor = Ru).prototype.replayTextBackground_ = function(t, e, i, r, o, n, s) {
				t.beginPath(), t.moveTo.apply(t, e), t.lineTo.apply(t, i), t.lineTo.apply(t, r), t
					.lineTo.apply(t, o), t.lineTo.apply(t, e), n && (this.alignFill_ = n[2], this.fill_(
						t)), s && (this.setStrokeStyle_(t, s), t.stroke())
			}, Ru.prototype.replayImage_ = function(t, e, i, r, o, n, s, a, h, l, u, p, c, d, _, f, g,
				y) {
				var m = g || y;
				e -= o *= c, i -= n *= c;
				var v, x, E, S, C = _ + l > r.width ? r.width - l : _,
					w = a + u > r.height ? r.height - u : a,
					T = f[3] + C * c + f[1],
					R = f[0] + w * c + f[2],
					_ = e - f[3],
					a = i - f[0];
				!m && 0 === p || (v = [_, a], x = [_ + T, a], E = [_ + T, a + R], S = [_, a + R]);
				f = null;
				0 !== p ? (f = oi(mu, o = e + o, n = i + n, 1, 1, p, -o, -n), Tt(yu), Pt(yu, ti(mu, v)),
					Pt(yu, ti(mu, x)), Pt(yu, ti(mu, E)), Pt(yu, ti(mu, S))) : wt(_, a, _ + T, a +
					R, yu);
				a = t.canvas, R = y ? y[2] * c / 2 : 0, R = yu[0] - R <= a.width && 0 <= yu[2] + R &&
					yu[1] - R <= a.height && 0 <= yu[3] + R;
				d && (e = Math.round(e), i = Math.round(i)), s ? !R && 1 == s[4] || (bt(s, yu), (d = R ?
						[t, f ? f.slice(0) : null, h, r, l, u, C, w, e, i, c] : null) && m && d
					.push(g, y, v, x, E, S), s.push(d)) : R && (m && this.replayTextBackground_(t,
					v, x, E, S, g, y), fl(t, f, h, r, l, u, C, w, e, i, c))
			}, Ru.prototype.applyPixelRatio = function(t) {
				var e = this.pixelRatio;
				return 1 == e ? t : t.map(function(t) {
					return t * e
				})
			}, Ru.prototype.appendFlatCoordinates = function(t, e, i, r, o, n) {
				var s = this.coordinates.length,
					a = this.getBufferedMaxExtent();
				n && (e += r);
				for (var h, l, u = [t[e], t[e + 1]], p = [NaN, NaN], c = !0, d = e + r; d < i; d += r)
					p[0] = t[d], p[1] = t[d + 1], c = (l = St(a, p)) !== h ? (c && (this.coordinates[
							s++] = u[0], this.coordinates[s++] = u[1]), this.coordinates[s++] = p[0],
						this.coordinates[s++] = p[1], !1) : l !== pt.INTERSECTING || (this.coordinates[
						s++] = p[0], this.coordinates[s++] = p[1], !1), u[0] = p[0], u[1] = p[1], h = l;
				return (o && c || d === e + r) && (this.coordinates[s++] = u[0], this.coordinates[s++] =
					u[1]), s
			}, Ru.prototype.drawCustomCoordinates_ = function(t, e, i, r, o) {
				for (var n = 0, s = i.length; n < s; ++n) {
					var a = i[n],
						h = this.appendFlatCoordinates(t, e, a, r, !1, !1);
					o.push(h), e = a
				}
				return e
			}, Ru.prototype.drawCustom = function(t, e, i) {
				this.beginGeometry(t, e);
				var r, o, n, s, a = t.getType(),
					h = t.getStride(),
					l = this.coordinates.length;
				if (a == Ht.MULTI_POLYGON) {
					r = t.getOrientedFlatCoordinates(), s = [];
					for (var u = t.getEndss(), p = _ = 0, c = u.length; p < c; ++p) {
						var d = [],
							_ = this.drawCustomCoordinates_(r, _, u[p], h, d);
						s.push(d)
					}
					this.instructions.push([_u.CUSTOM, l, s, t, i, Ri])
				} else a == Ht.POLYGON || a == Ht.MULTI_LINE_STRING ? (n = [], r = a == Ht.POLYGON ? t
					.getOrientedFlatCoordinates() : t.getFlatCoordinates(), _ = this
					.drawCustomCoordinates_(r, 0, t.getEnds(), h, n), this.instructions.push([_u
						.CUSTOM, l, n, t, i, Ti
					])) : a == Ht.LINE_STRING || a == Ht.MULTI_POINT ? (r = t.getFlatCoordinates(),
					o = this.appendFlatCoordinates(r, 0, r.length, h, !1, !1), this.instructions
					.push([_u.CUSTOM, l, o, t, i, wi])) : a == Ht.POINT && (r = t
					.getFlatCoordinates(), this.coordinates.push(r[0], r[1]), o = this.coordinates
					.length, this.instructions.push([_u.CUSTOM, l, o, t, i]));
				this.endGeometry(t, e)
			}, Ru.prototype.beginGeometry = function(t, e) {
				this.beginGeometryInstruction1_ = [_u.BEGIN_GEOMETRY, e, 0], this.instructions.push(this
					.beginGeometryInstruction1_), this.beginGeometryInstruction2_ = [_u
					.BEGIN_GEOMETRY, e, 0
				], this.hitDetectionInstructions.push(this.beginGeometryInstruction2_)
			}, Ru.prototype.finish = function() {}, Ru.prototype.fill_ = function(t) {
				var e, i;
				this.alignFill_ && (e = ti(this.renderedTransform_, [0, 0]), i = 512 * this.pixelRatio,
						t.translate(e[0] % i, e[1] % i), t.rotate(this.viewRotation_)), t.fill(), this
					.alignFill_ && t.setTransform.apply(t, _l)
			}, Ru.prototype.setStrokeStyle_ = function(t, e) {
				t.strokeStyle = e[1], t.lineWidth = e[2], t.lineCap = e[3], t.lineJoin = e[4], t
					.miterLimit = e[5], lr && (t.lineDashOffset = e[7], t.setLineDash(e[6]))
			}, Ru.prototype.renderDeclutter_ = function(t, e) {
				if (t && 5 < t.length) {
					var i = t[4];
					if (1 == i || i == t.length - 5) {
						e = {
							minX: t[0],
							minY: t[1],
							maxX: t[2],
							maxY: t[3],
							value: e
						};
						if (!this.declutterTree.collides(e)) {
							this.declutterTree.insert(e);
							for (var r = 5, o = t.length; r < o; ++r) {
								var n = t[r];
								n && (11 < n.length && this.replayTextBackground_(n[0], n[13], n[14], n[
									15], n[16], n[11], n[12]), fl.apply(void 0, n))
							}
						}
						t.length = 5, Tt(t)
					}
				}
			}, Ru.prototype.replay_ = function(t, e, i, r, o, n, s) {
				var a;
				this.pixelCoordinates_ && _t(e, this.renderedTransform_) ? a = this.pixelCoordinates_ :
					(this.pixelCoordinates_ || (this.pixelCoordinates_ = []), a = Zt(this.coordinates,
						0, this.coordinates.length, 2, e, this.pixelCoordinates_), $e(this
						.renderedTransform_, e));
				for (var h, l, u, p, c, d, _, f, g, y, m, v = !dt(i), x = 0, E = r.length, S = 0, C = 0,
						w = 0, T = null, R = null, I = this.coordinateCache_, L = this.viewRotation_,
						b = {
							context: t,
							pixelRatio: this.pixelRatio,
							resolution: this.resolution,
							rotation: L
						}, P = this.instructions != r || this.overlaps ? 0 : 200; x < E;) {
					var M = r[x];
					switch (M[0]) {
						case _u.BEGIN_GEOMETRY:
							g = M[1], v && i[ct(g)] || !g.getGeometry() ? x = M[2] : void 0 === s || zt(
								s, g.getGeometry().getExtent()) ? ++x : x = M[2] + 1;
							break;
						case _u.BEGIN_PATH:
							P < C && (this.fill_(t), C = 0), P < w && (t.stroke(), w = 0), C || w || (t
								.beginPath(), p = c = NaN), ++x;
							break;
						case _u.CIRCLE:
							var F = a[S = M[1]],
								O = a[S + 1],
								A = a[S + 2] - F,
								N = a[S + 3] - O,
								N = Math.sqrt(A * A + N * N);
							t.moveTo(F + N, O), t.arc(F, O, N, 0, 2 * Math.PI, !0), ++x;
							break;
						case _u.CLOSE_PATH:
							t.closePath(), ++x;
							break;
						case _u.CUSTOM:
							S = M[1], h = M[2];
							var G = M[3],
								D = M[4],
								k = 6 == M.length ? M[5] : void 0;
							b.geometry = G, b.feature = g, x in I || (I[x] = []);
							var j = I[x];
							k ? k(a, S, h, 2, j) : (j[0] = a[S], j[1] = a[S + 1], j.length = 2), D(j,
								b), ++x;
							break;
						case _u.DRAW_IMAGE:
							S = M[1], h = M[2], f = M[3], l = M[4], u = M[5], Q = n ? null : M[6];
							var U = M[7],
								Y = M[8],
								B = M[9],
								z = M[10],
								X = M[11],
								V = M[12],
								W = M[13],
								K = M[14],
								H = void 0,
								Z = void 0,
								q = void 0;
							for (16 < M.length ? (H = M[15], Z = M[16], q = M[17]) : (H = Jh, Z = q = !
									1), X && (V += L); S < h; S += 2) this.replayImage_(t, a[S], a[S +
									1], f, l, u, Q, U, Y, B, z, V, W, o, K, H, Z ? T : null, q ? R :
								null);
							this.renderDeclutter_(Q, g), ++x;
							break;
						case _u.DRAW_CHARS:
							var O = M[1],
								N = M[2],
								J = M[3],
								Q = n ? null : M[4],
								G = M[5],
								$ = M[6],
								tt = M[7],
								k = M[8],
								et = M[9],
								it = M[10],
								rt = M[11],
								D = M[12],
								ot = M[13],
								nt = M[14],
								j = zr(a, O, N, 2),
								X = k(D);
							if (G || X <= j) {
								var G = this.textStates[ot].textAlign,
									st = function(t, e, i, r, o, n, s, a) {
										for (var h, l, u = [], p = t[e] > t[i - r], c = o.length, d = t[
													e], _ = t[e + 1], f = t[e += r], g = t[e + 1], y =
												0, m = Math.sqrt(Math.pow(f - d, 2) + Math.pow(g - _,
													2)), v = "", x = 0, E = 0; E < c; ++E) {
											R = p ? c - E - 1 : E;
											var S = o.charAt(R),
												C = n(v = p ? S + v : v + S) - x;
											x += C;
											for (var w = s + C / 2; e < i - r && y + m < w;) d = f, _ =
												g, f = t[e += r], g = t[e + 1], y += m, m = Math.sqrt(
													Math.pow(f - d, 2) + Math.pow(g - _, 2));
											var T = w - y,
												R = Math.atan2(g - _, f - d);
											if (p && (R += 0 < R ? -Math.PI : Math.PI), void 0 !== l) {
												var I = R - l;
												if (I += I > Math.PI ? -2 * Math.PI : I < -Math.PI ? 2 *
													Math.PI : 0, Math.abs(I) > a) return null
											}
											I = T / m, T = oe(d, f, I), I = oe(_, g, I);
											l == R ? (p && (h[0] = T, h[1] = I, h[2] = C / 2), h[4] =
												v) : (h = [T, I, (x = C) / 2, R, v = S], p ? u.unshift(
													h) : u.push(h), l = R), s += C
										}
										return u
									}(a, O, N, 2, D, k, (j - X) * gu[G], tt);
								if (st) {
									var at = void 0,
										ht = void 0,
										lt = void 0,
										ut = void 0,
										pt = void 0;
									if (it)
										for (at = 0, ht = st.length; at < ht; ++at) lt = (pt = st[at])[
												4], ut = this.getImage(lt, ot, "", it), l = pt[2] + rt,
											u = J * ut.height + 2 * (.5 - J) * rt - et, this
											.replayImage_(t, pt[0], pt[1], ut, l, u, Q, ut.height, 1, 0,
												0, pt[3], nt, !1, ut.width, Jh, null, null);
									if ($)
										for (at = 0, ht = st.length; at < ht; ++at) lt = (pt = st[at])[
												4], ut = this.getImage(lt, ot, $, ""), l = pt[2], u =
											J * ut.height - et, this.replayImage_(t, pt[0], pt[1], ut,
												l, u, Q, ut.height, 1, 0, 0, pt[3], nt, !1, ut.width,
												Jh, null, null)
								}
							}
							this.renderDeclutter_(Q, g), ++x;
							break;
						case _u.END_GEOMETRY:
							if (void 0 !== n) {
								tt = n(g = M[1]);
								if (tt) return tt
							}++x;
							break;
						case _u.FILL:
							P ? C++ : this.fill_(t), ++x;
							break;
						case _u.MOVE_TO_LINE_TO:
							for (S = M[1], h = M[2], y = a[S], _ = (m = a[S + 1]) + .5 | 0, (d = y +
									.5 | 0) === p && _ === c || (t.moveTo(y, m), p = d, c = _), S +=
								2; S < h; S += 2) d = (y = a[S]) + .5 | 0, _ = (m = a[S + 1]) + .5 | 0,
								S != h - 2 && d === p && _ === c || (t.lineTo(y, m), p = d, c = _);
							++x;
							break;
						case _u.SET_FILL_STYLE:
							T = M, this.alignFill_ = M[2], C && (this.fill_(t), C = 0, w && (t.stroke(),
								w = 0)), t.fillStyle = M[1], ++x;
							break;
						case _u.SET_STROKE_STYLE:
							R = M, w && (t.stroke(), w = 0), this.setStrokeStyle_(t, M), ++x;
							break;
						case _u.STROKE:
							P ? w++ : t.stroke(), ++x;
							break;
						default:
							++x
					}
				}
				C && this.fill_(t), w && t.stroke()
			}, Ru.prototype.replay = function(t, e, i, r, o) {
				this.viewRotation_ = i, this.replay_(t, e, r, this.instructions, o, void 0, void 0)
			}, Ru.prototype.replayHitDetection = function(t, e, i, r, o, n) {
				return this.viewRotation_ = i, this.replay_(t, e, r, this.hitDetectionInstructions, !0,
					o, n)
			}, Ru.prototype.reverseHitDetectionInstructions = function() {
				var t = this.hitDetectionInstructions;
				t.reverse();
				for (var e, i, r = t.length, o = -1, n = 0; n < r; ++n)(i = (e = t[n])[0]) == _u
					.END_GEOMETRY ? o = n : i == _u.BEGIN_GEOMETRY && (e[2] = n, function(t, e, i) {
						for (; e < i;) {
							var r = t[e];
							t[e] = t[i], t[i] = r, ++e, --i
						}
					}(this.hitDetectionInstructions, o, n), o = -1)
			}, Ru.prototype.setFillStrokeStyle = function(t, e) {
				var i, r = this.state;
				t ? (i = t.getColor(), r.fillStyle = gl(i || Hh)) : r.fillStyle = void 0, e ? (i = e
					.getColor(), r.strokeStyle = gl(i || qh), i = e.getLineCap(), r.lineCap =
					void 0 !== i ? i : "round", i = e.getLineDash(), r.lineDash = i ? i.slice() :
					Zh, i = e.getLineDashOffset(), r.lineDashOffset = i || 0, i = e.getLineJoin(), r
					.lineJoin = void 0 !== i ? i : "round", i = e.getWidth(), r.lineWidth =
					void 0 !== i ? i : 1, e = e.getMiterLimit(), r.miterLimit = void 0 !== e ? e :
					10, r.lineWidth > this.maxLineWidth && (this.maxLineWidth = r.lineWidth, this
						.bufferedMaxExtent_ = null)) : (r.strokeStyle = void 0, r.lineCap = void 0,
					r.lineDash = null, r.lineDashOffset = void 0, r.lineJoin = void 0, r.lineWidth =
					void 0, r.miterLimit = void 0)
			}, Ru.prototype.createFill = function(t, e) {
				var i = t.fillStyle,
					t = [_u.SET_FILL_STYLE, i];
				return "string" != typeof i && t.push(!0), t
			}, Ru.prototype.applyStroke = function(t) {
				this.instructions.push(this.createStroke(t))
			}, Ru.prototype.createStroke = function(t) {
				return [_u.SET_STROKE_STYLE, t.strokeStyle, t.lineWidth * this.pixelRatio, t.lineCap, t
					.lineJoin, t.miterLimit, this.applyPixelRatio(t.lineDash), t.lineDashOffset *
					this.pixelRatio
				]
			}, Ru.prototype.updateFillStyle = function(t, e, i) {
				var r = t.fillStyle;
				"string" == typeof r && t.currentFillStyle == r || (void 0 !== r && this.instructions
					.push(e.call(this, t, i)), t.currentFillStyle = r)
			}, Ru.prototype.updateStrokeStyle = function(t, e) {
				var i = t.strokeStyle,
					r = t.lineCap,
					o = t.lineDash,
					n = t.lineDashOffset,
					s = t.lineJoin,
					a = t.lineWidth,
					h = t.miterLimit;
				t.currentStrokeStyle == i && t.currentLineCap == r && (o == t.currentLineDash || _t(t
						.currentLineDash, o)) && t.currentLineDashOffset == n && t.currentLineJoin ==
					s && t.currentLineWidth == a && t.currentMiterLimit == h || (void 0 !== i && e.call(
							this, t), t.currentStrokeStyle = i, t.currentLineCap = r, t
						.currentLineDash = o, t.currentLineDashOffset = n, t.currentLineJoin = s, t
						.currentLineWidth = a, t.currentMiterLimit = h)
			}, Ru.prototype.endGeometry = function(t, e) {
				this.beginGeometryInstruction1_[2] = this.instructions.length, this
					.beginGeometryInstruction1_ = null, this.beginGeometryInstruction2_[2] = this
					.hitDetectionInstructions.length, this.beginGeometryInstruction2_ = null;
				e = [_u.END_GEOMETRY, e];
				this.instructions.push(e), this.hitDetectionInstructions.push(e)
			}, Ru.prototype.getBufferedMaxExtent = function() {
				var t;
				return !this.bufferedMaxExtent_ && (this.bufferedMaxExtent_ = yt(this.maxExtent), 0 <
					this.maxLineWidth) && (t = this.resolution * (this.maxLineWidth + 1) / 2, gt(
					this.bufferedMaxExtent_, t, this.bufferedMaxExtent_)), this.bufferedMaxExtent_
			}, Ru),
			xu = ((au = vu) && (Tu.__proto__ = au), ((Tu.prototype = Object.create(au && au.prototype))
				.constructor = Tu).prototype.drawCoordinates_ = function(t, e, i, r) {
				return this.appendFlatCoordinates(t, e, i, r, !1, !1)
			}, Tu.prototype.drawPoint = function(t, e) {
				var i, r, o;
				this.image_ && (this.beginGeometry(t, e), i = t.getFlatCoordinates(), o = t.getStride(),
					r = this.coordinates.length, o = this.drawCoordinates_(i, 0, i.length, o), this
					.instructions.push([_u.DRAW_IMAGE, r, o, this.image_, this.anchorX_, this
						.anchorY_, this.declutterGroup_, this.height_, this.opacity_, this
						.originX_, this.originY_, this.rotateWithView_, this.rotation_, this
						.scale_ * this.pixelRatio, this.width_
					]), this.hitDetectionInstructions.push([_u.DRAW_IMAGE, r, o, this
						.hitDetectionImage_, this.anchorX_, this.anchorY_, this.declutterGroup_,
						this.height_, this.opacity_, this.originX_, this.originY_, this
						.rotateWithView_, this.rotation_, this.scale_, this.width_
					]), this.endGeometry(t, e))
			}, Tu.prototype.drawMultiPoint = function(t, e) {
				var i, r, o;
				this.image_ && (this.beginGeometry(t, e), i = t.getFlatCoordinates(), o = t.getStride(),
					r = this.coordinates.length, o = this.drawCoordinates_(i, 0, i.length, o), this
					.instructions.push([_u.DRAW_IMAGE, r, o, this.image_, this.anchorX_, this
						.anchorY_, this.declutterGroup_, this.height_, this.opacity_, this
						.originX_, this.originY_, this.rotateWithView_, this.rotation_, this
						.scale_ * this.pixelRatio, this.width_
					]), this.hitDetectionInstructions.push([_u.DRAW_IMAGE, r, o, this
						.hitDetectionImage_, this.anchorX_, this.anchorY_, this.declutterGroup_,
						this.height_, this.opacity_, this.originX_, this.originY_, this
						.rotateWithView_, this.rotation_, this.scale_, this.width_
					]), this.endGeometry(t, e))
			}, Tu.prototype.finish = function() {
				this.reverseHitDetectionInstructions(), this.anchorX_ = void 0, this.anchorY_ = void 0,
					this.hitDetectionImage_ = null, this.image_ = null, this.height_ = void 0, this
					.scale_ = void 0, this.opacity_ = void 0, this.originX_ = void 0, this.originY_ =
					void 0, this.rotateWithView_ = void 0, this.rotation_ = void 0, this.width_ = void 0
			}, Tu.prototype.setImageStyle = function(t, e) {
				var i = t.getAnchor(),
					r = t.getSize(),
					o = t.getHitDetectionImage(1),
					n = t.getImage(1),
					s = t.getOrigin();
				this.anchorX_ = i[0], this.anchorY_ = i[1], this.declutterGroup_ = e, this
					.hitDetectionImage_ = o, this.image_ = n, this.height_ = r[1], this.opacity_ = t
					.getOpacity(), this.originX_ = s[0], this.originY_ = s[1], this.rotateWithView_ = t
					.getRotateWithView(), this.rotation_ = t.getRotation(), this.scale_ = t.getScale(),
					this.width_ = r[0]
			}, Tu),
			Eu = ((su = vu) && (wu.__proto__ = su), ((wu.prototype = Object.create(su && su.prototype))
				.constructor = wu).prototype.drawFlatCoordinates_ = function(t, e, i, r) {
				var o = this.coordinates.length,
					r = this.appendFlatCoordinates(t, e, i, r, !1, !1),
					r = [_u.MOVE_TO_LINE_TO, o, r];
				return this.instructions.push(r), this.hitDetectionInstructions.push(r), i
			}, wu.prototype.drawLineString = function(t, e) {
				var i = this.state,
					r = i.strokeStyle,
					o = i.lineWidth;
				void 0 !== r && void 0 !== o && (this.updateStrokeStyle(i, this.applyStroke), this
					.beginGeometry(t, e), this.hitDetectionInstructions.push([_u.SET_STROKE_STYLE, i
						.strokeStyle, i.lineWidth, i.lineCap, i.lineJoin, i.miterLimit, i
						.lineDash, i.lineDashOffset
					], cu), o = t.getFlatCoordinates(), i = t.getStride(), this
					.drawFlatCoordinates_(o, 0, o.length, i), this.hitDetectionInstructions.push(
					pu), this.endGeometry(t, e))
			}, wu.prototype.drawMultiLineString = function(t, e) {
				var i = this.state,
					r = i.strokeStyle,
					o = i.lineWidth;
				if (void 0 !== r && void 0 !== o) {
					this.updateStrokeStyle(i, this.applyStroke), this.beginGeometry(t, e), this
						.hitDetectionInstructions.push([_u.SET_STROKE_STYLE, i.strokeStyle, i.lineWidth,
							i.lineCap, i.lineJoin, i.miterLimit, i.lineDash, i.lineDashOffset
						], cu);
					for (var n = t.getEnds(), s = t.getFlatCoordinates(), a = t.getStride(), h = 0, l =
							0, u = n.length; l < u; ++l) h = this.drawFlatCoordinates_(s, h, n[l], a);
					this.hitDetectionInstructions.push(pu), this.endGeometry(t, e)
				}
			}, wu.prototype.finish = function() {
				var t = this.state;
				null != t.lastStroke && t.lastStroke != this.coordinates.length && this.instructions
					.push(pu), this.reverseHitDetectionInstructions(), this.state = null
			}, wu.prototype.applyStroke = function(t) {
				null != t.lastStroke && t.lastStroke != this.coordinates.length && (this.instructions
						.push(pu), t.lastStroke = this.coordinates.length), t.lastStroke = 0, su
					.prototype.applyStroke.call(this, t), this.instructions.push(cu)
			}, wu),
			Su = ((nu = vu) && (Cu.__proto__ = nu), ((Cu.prototype = Object.create(nu && nu.prototype))
				.constructor = Cu).prototype.drawFlatCoordinatess_ = function(t, e, i, r) {
				var o = this.state,
					n = void 0 !== o.fillStyle,
					s = null != o.strokeStyle,
					a = i.length;
				this.instructions.push(cu), this.hitDetectionInstructions.push(cu);
				for (var h = 0; h < a; ++h) {
					var l = i[h],
						u = this.coordinates.length,
						p = this.appendFlatCoordinates(t, e, l, r, !0, !s),
						p = [_u.MOVE_TO_LINE_TO, u, p];
					this.instructions.push(p), this.hitDetectionInstructions.push(p), s && (this
						.instructions.push(du), this.hitDetectionInstructions.push(du)), e = l
				}
				return n && (this.instructions.push(uu), this.hitDetectionInstructions.push(uu)), s && (
					this.instructions.push(pu), this.hitDetectionInstructions.push(pu)), e
			}, Cu.prototype.drawCircle = function(t, e) {
				var i, r = this.state,
					o = r.fillStyle,
					n = r.strokeStyle;
				void 0 === o && void 0 === n || (this.setFillStrokeStyles_(t), this.beginGeometry(t, e),
					void 0 !== r.fillStyle && this.hitDetectionInstructions.push([_u.SET_FILL_STYLE,
						to(Hh)
					]), void 0 !== r.strokeStyle && this.hitDetectionInstructions.push([_u
						.SET_STROKE_STYLE, r.strokeStyle, r.lineWidth, r.lineCap, r.lineJoin, r
						.miterLimit, r.lineDash, r.lineDashOffset
					]), i = t.getFlatCoordinates(), o = t.getStride(), n = this.coordinates.length,
					this.appendFlatCoordinates(i, 0, i.length, o, !1, !1), n = [_u.CIRCLE, n], this
					.instructions.push(cu, n), this.hitDetectionInstructions.push(cu, n), this
					.hitDetectionInstructions.push(uu), void 0 !== r.fillStyle && this.instructions
					.push(uu), void 0 !== r.strokeStyle && (this.instructions.push(pu), this
						.hitDetectionInstructions.push(pu)), this.endGeometry(t, e))
			}, Cu.prototype.drawPolygon = function(t, e) {
				var i = this.state,
					r = i.fillStyle,
					o = i.strokeStyle;
				void 0 === r && void 0 === o || (this.setFillStrokeStyles_(t), this.beginGeometry(t, e),
					void 0 !== i.fillStyle && this.hitDetectionInstructions.push([_u.SET_FILL_STYLE,
						to(Hh)
					]), void 0 !== i.strokeStyle && this.hitDetectionInstructions.push([_u
						.SET_STROKE_STYLE, i.strokeStyle, i.lineWidth, i.lineCap, i.lineJoin, i
						.miterLimit, i.lineDash, i.lineDashOffset
					]), r = t.getEnds(), o = t.getOrientedFlatCoordinates(), i = t.getStride(), this
					.drawFlatCoordinatess_(o, 0, r, i), this.endGeometry(t, e))
			}, Cu.prototype.drawMultiPolygon = function(t, e) {
				var i = this.state,
					r = i.fillStyle,
					o = i.strokeStyle;
				if (void 0 !== r || void 0 !== o) {
					this.setFillStrokeStyles_(t), this.beginGeometry(t, e), void 0 !== i.fillStyle &&
						this.hitDetectionInstructions.push([_u.SET_FILL_STYLE, to(Hh)]), void 0 !== i
						.strokeStyle && this.hitDetectionInstructions.push([_u.SET_STROKE_STYLE, i
							.strokeStyle, i.lineWidth, i.lineCap, i.lineJoin, i.miterLimit, i
							.lineDash, i.lineDashOffset
						]);
					for (var n = t.getEndss(), s = t.getOrientedFlatCoordinates(), a = t.getStride(),
							h = 0, l = 0, u = n.length; l < u; ++l) h = this.drawFlatCoordinatess_(s, h,
						n[l], a);
					this.endGeometry(t, e)
				}
			}, Cu.prototype.finish = function() {
				this.reverseHitDetectionInstructions(), this.state = null;
				var t = this.tolerance;
				if (0 !== t)
					for (var e = this.coordinates, i = 0, r = e.length; i < r; ++i) e[i] = Li(e[i], t)
			}, Cu.prototype.setFillStrokeStyles_ = function(t) {
				var e = this.state;
				void 0 !== e.fillStyle && this.updateFillStyle(e, this.createFill, t), void 0 !== e
					.strokeStyle && this.updateStrokeStyle(e, this.applyStroke)
			}, Cu);

		function Cu(t, e, i, r, o, n) {
			nu.call(this, t, e, i, r, o, n)
		}

		function wu(t, e, i, r, o, n) {
			su.call(this, t, e, i, r, o, n)
		}

		function Tu(t, e, i, r, o, n) {
			au.call(this, t, e, i, r, o, n), this.declutterGroup_ = null, this.hitDetectionImage_ = null,
				this.image_ = null, this.anchorX_ = void 0, this.anchorY_ = void 0, this.height_ = void 0,
				this.opacity_ = void 0, this.originX_ = void 0, this.originY_ = void 0, this
				.rotateWithView_ = void 0, this.rotation_ = void 0, this.scale_ = void 0, this.width_ =
				void 0
		}

		function Ru(t, e, i, r, o, n) {
			hu.call(this), this.declutterTree = n, this.tolerance = t, this.maxExtent = e, this.overlaps =
				o, this.pixelRatio = r, this.maxLineWidth = 0, this.resolution = i, this.alignFill_, this
				.beginGeometryInstruction1_ = null, this.beginGeometryInstruction2_ = null, this
				.bufferedMaxExtent_ = null, this.instructions = [], this.coordinates = [], this
				.coordinateCache_ = {}, this.renderedTransform_ = [1, 0, 0, 1, 0, 0], this
				.hitDetectionInstructions = [], this.pixelCoordinates_ = null, this.state = {}, this
				.viewRotation_ = 0
		}
		var Iu, Lu, bu = {
				Circle: Su,
				Default: vu,
				Image: xu,
				LineString: Eu,
				Polygon: Su,
				Text: ((Lu = vu) && (Ou.__proto__ = Lu), ((Ou.prototype = Object.create(Lu && Lu.prototype))
					.constructor = Ou).prototype.drawText = function(t, e) {
					var i = this.textFillState_,
						r = this.textStrokeState_,
						o = this.textState_;
					if ("" !== this.text_ && o && (i || r)) {
						var n = this.coordinates.length,
							i = t.getType(),
							s = null,
							a = 2,
							h = 2;
						if ("line" === o.placement) {
							if (zt(this.getBufferedMaxExtent(), t.getExtent())) {
								s = t.getFlatCoordinates(), h = t.getStride();
								if (i == Ht.LINE_STRING) u = [s.length];
								else if (i == Ht.MULTI_LINE_STRING) u = t.getEnds();
								else if (i == Ht.POLYGON) u = t.getEnds().slice(0, 1);
								else if (i == Ht.MULTI_POLYGON)
									for (var l = t.getEndss(), u = [], p = 0, c = l.length; p <
										c; ++p) u.push(l[p][0]);
								this.beginGeometry(t, e);
								for (var d, _, f = o.textAlign, g = 0, y = 0, m = u.length; y <
									m; ++y) {
									for (_ = null == f ? (g = (d = function(t, e, i, r, o) {
											for (var n, s, a, h, l, u, p, c, d = i, _ = i,
													f = 0, g = 0, y = i, m = i; m < r; m +=
												o) {
												var v = e[m],
													x = e[m + 1];
												void 0 !== a && (p = v - a, c = x - h, s =
													Math.sqrt(p * p + c * c), void 0 !==
													l && (g += n, Math.acos((l * p + u *
														c) / (n * s)) > t && (f <
														g && (f = g, d = y, _ = m),
														g = 0, y = m - o)), n = s, l =
													p, u = c), a = v, h = x
											}
											return (g += s) > f ? [y, m] : [d, _]
										}(o.maxAngle, s, g, u[y], h))[0], d[1]) : u[y], p = g; p <
										_; p += h) this.coordinates.push(s[p], s[p + 1]);
									a = this.coordinates.length, g = u[y], this.drawChars_(n, a,
										this.declutterGroup_), n = a
								}
								this.endGeometry(t, e)
							}
						} else {
							var r = this.getImage(this.text_, this.textKey_, this.fillKey_, this
									.strokeKey_),
								v = r.width / this.pixelRatio;
							switch (i) {
								case Ht.POINT:
								case Ht.MULTI_POINT:
									a = (s = t.getFlatCoordinates()).length;
									break;
								case Ht.LINE_STRING:
									s = t.getFlatMidpoint();
									break;
								case Ht.CIRCLE:
									s = t.getCenter();
									break;
								case Ht.MULTI_LINE_STRING:
									a = (s = t.getFlatMidpoints()).length;
									break;
								case Ht.POLYGON:
									if (s = t.getFlatInteriorPoint(), !o.overflow && s[2] / this
										.resolution < v) return;
									h = 3;
									break;
								case Ht.MULTI_POLYGON:
									var x = t.getFlatInteriorPoints();
									for (s = [], p = 0, c = x.length; p < c; p += 3)(o.overflow ||
										x[p + 2] / this.resolution >= v) && s.push(x[p], x[p +
										1]);
									if (0 == (a = s.length)) return
							}
							a = this.appendFlatCoordinates(s, 0, a, h, !1, !1), (o.backgroundFill ||
									o.backgroundStroke) && (this.setFillStrokeStyle(o
									.backgroundFill, o.backgroundStroke), o.backgroundFill && (
									this.updateFillStyle(this.state, this.createFill, t), this
									.hitDetectionInstructions.push(this.createFill(this.state,
										t))), o.backgroundStroke && (this.updateStrokeStyle(this
										.state, this.applyStroke), this.hitDetectionInstructions
									.push(this.createStroke(this.state)))), this.beginGeometry(t,
								e), this.drawTextImage_(r, n, a), this.endGeometry(t, e)
						}
					}
				}, Ou.prototype.getImage = function(t, e, i, r) {
					var o = r + e + t + i + this.pixelRatio;
					if (!Qh.containsKey(o)) {
						var n = r ? this.strokeStates[r] || this.textStrokeState_ : null,
							s = i ? this.fillStates[i] || this.textFillState_ : null,
							a = this.textStates[e] || this.textState_,
							h = this.pixelRatio,
							l = a.scale * h,
							e = gu[a.textAlign || "center"],
							u = r && n.lineWidth ? n.lineWidth : 0,
							p = t.split("\n"),
							c = p.length,
							d = [],
							h = function(t, e, i) {
								for (var r = e.length, o = 0, n = 0; n < r; ++n) {
									var s = cl(t, e[n]),
										o = Math.max(o, s);
									i.push(s)
								}
								return o
							}(a.font, p, d),
							_ = pl(a.font),
							t = _ * c,
							h = h + u,
							f = ds(Math.ceil(h * l), Math.ceil((t + u) * l)),
							t = f.canvas;
						Qh.set(o, t), 1 != l && f.scale(l, l), f.font = a.font, r && (f
							.strokeStyle = n.strokeStyle, f.lineWidth = u, f.lineCap = n
							.lineCap, f.lineJoin = n.lineJoin, f.miterLimit = n.miterLimit,
							lr && n.lineDash.length && (f.setLineDash(n.lineDash), f
								.lineDashOffset = n.lineDashOffset)), i && (f.fillStyle = s
							.fillStyle), f.textBaseline = "middle", f.textAlign = "center";
						var g, y = .5 - e,
							m = e * t.width / l + y * u;
						if (r)
							for (g = 0; g < c; ++g) f.strokeText(p[g], m + y * d[g], .5 * (u + _) +
								g * _);
						if (i)
							for (g = 0; g < c; ++g) f.fillText(p[g], m + y * d[g], .5 * (u + _) +
								g * _)
					}
					return Qh.get(o)
				}, Ou.prototype.drawTextImage_ = function(t, e, i) {
					var r = this.textState_,
						o = this.textStrokeState_,
						n = this.pixelRatio,
						s = gu[r.textAlign || "center"],
						a = gu[r.textBaseline],
						o = o && o.lineWidth ? o.lineWidth : 0,
						s = s * t.width / n + 2 * (.5 - s) * o,
						o = a * t.height / n + 2 * (.5 - a) * o;
					this.instructions.push([_u.DRAW_IMAGE, e, i, t, (s - this.textOffsetX_) * n, (
							o - this.textOffsetY_) * n, this.declutterGroup_, t.height, 1,
						0, 0, this.textRotateWithView_, this.textRotation_, 1, t.width, r
						.padding == Jh ? Jh : r.padding.map(function(t) {
							return t * n
						}), !!r.backgroundFill, !!r.backgroundStroke
					]), this.hitDetectionInstructions.push([_u.DRAW_IMAGE, e, i, t, (s - this
							.textOffsetX_) * n, (o - this.textOffsetY_) * n, this
						.declutterGroup_, t.height, 1, 0, 0, this.textRotateWithView_, this
						.textRotation_, 1 / n, t.width, r.padding, !!r.backgroundFill, !!r
						.backgroundStroke
					])
				}, Ou.prototype.drawChars_ = function(t, e, i) {
					var r = this.textStrokeState_,
						o = this.textState_,
						n = this.textFillState_,
						s = this.strokeKey_;
					r && (s in this.strokeStates || (this.strokeStates[s] = {
						strokeStyle: r.strokeStyle,
						lineCap: r.lineCap,
						lineDashOffset: r.lineDashOffset,
						lineWidth: r.lineWidth,
						lineJoin: r.lineJoin,
						miterLimit: r.miterLimit,
						lineDash: r.lineDash
					}));
					var a = this.textKey_;
					this.textKey_ in this.textStates || (this.textStates[this.textKey_] = {
						font: o.font,
						textAlign: o.textAlign || "center",
						scale: o.scale
					});
					var h = this.fillKey_;
					n && (h in this.fillStates || (this.fillStates[h] = {
						fillStyle: n.fillStyle
					}));
					var l = this.pixelRatio,
						u = gu[o.textBaseline],
						p = this.textOffsetY_ * l,
						n = this.text_,
						c = o.font,
						d = o.scale,
						r = r ? r.lineWidth * d / 2 : 0,
						_ = this.widths_[c];
					_ || (this.widths_[c] = _ = {}), this.instructions.push([_u.DRAW_CHARS, t, e, u,
						i, o.overflow, h, o.maxAngle,
						function(t) {
							return (_[t] || (_[t] = cl(c, t))) * d * l
						},
						p, s, r * l, n, a, 1
					]), this.hitDetectionInstructions.push([_u.DRAW_CHARS, t, e, u, i, o
						.overflow, h, o.maxAngle,
						function(t) {
							return (_[t] || (_[t] = cl(c, t))) * d
						},
						p, s, r, n, a, 1 / l
					])
				}, Ou.prototype.setTextStyle = function(t, e) {
					var i, r, o, n, s, a;
					t ? (this.declutterGroup_ = e, (e = t.getFill()) ? ((i = this.textFillState_) ||
								(i = this.textFillState_ = {}), i.fillStyle = gl(e.getColor() || Hh)
								) : i = this.textFillState_ = null, (e = t.getStroke()) ? ((r = this
									.textStrokeState_) || (r = this.textStrokeState_ = {}), o = e
								.getLineDash(), s = e.getLineDashOffset(), a = e.getWidth(), n = e
								.getMiterLimit(), r.lineCap = e.getLineCap() || "round", r
								.lineDash = o ? o.slice() : Zh, r.lineDashOffset = void 0 === s ?
								0 : s, r.lineJoin = e.getLineJoin() || "round", r.lineWidth =
								void 0 === a ? 1 : a, r.miterLimit = void 0 === n ? 10 : n, r
								.strokeStyle = gl(e.getColor() || qh)) : r = this.textStrokeState_ =
							null, o = this.textState_, s = t.getFont() || "10px sans-serif", el(s),
							a = t.getScale(), o.overflow = t.getOverflow(), o.font = s, o.maxAngle =
							t.getMaxAngle(), o.placement = t.getPlacement(), o.textAlign = t
							.getTextAlign(), o.textBaseline = t.getTextBaseline() || "middle", o
							.backgroundFill = t.getBackgroundFill(), o.backgroundStroke = t
							.getBackgroundStroke(), o.padding = t.getPadding() || Jh, o.scale =
							void 0 === a ? 1 : a, n = t.getOffsetX(), e = t.getOffsetY(), s = t
							.getRotateWithView(), a = t.getRotation(), this.text_ = t.getText() ||
							"", this.textOffsetX_ = void 0 === n ? 0 : n, this.textOffsetY_ =
							void 0 === e ? 0 : e, this.textRotateWithView_ = void 0 !== s && s, this
							.textRotation_ = void 0 === a ? 0 : a, this.strokeKey_ = r ? (
								"string" == typeof r.strokeStyle ? r.strokeStyle : ct(r.strokeStyle)
								) + r.lineCap + r.lineDashOffset + "|" + r.lineWidth + r.lineJoin +
							r.miterLimit + "[" + r.lineDash.join() + "]" : "", this.textKey_ = o
							.font + o.scale + (o.textAlign || "?"), this.fillKey_ = i ? "string" ==
							typeof i.fillStyle ? i.fillStyle : "|" + ct(i.fillStyle) : "") : this
						.text_ = ""
				}, Ou)
			},
			Pu = ((Iu = ru) && (Fu.__proto__ = Iu), ((Fu.prototype = Object.create(Iu && Iu.prototype))
				.constructor = Fu).prototype.addDeclutter = function(t) {
				var e = null;
				return this.declutterTree_ && (t ? (e = this.declutterGroup_)[4]++ : (e = this
					.declutterGroup_ = [1 / 0, 1 / 0, -1 / 0, -1 / 0]).push(1)), e
			}, Fu.prototype.clip = function(t, e) {
				e = this.getClipCoords(e);
				t.beginPath(), t.moveTo(e[0], e[1]), t.lineTo(e[2], e[3]), t.lineTo(e[4], e[5]), t
					.lineTo(e[6], e[7]), t.clip()
			}, Fu.prototype.hasReplays = function(t) {
				for (var e in this.replaysByZIndex_)
					for (var i = this.replaysByZIndex_[e], r = 0, o = t.length; r < o; ++r)
						if (t[r] in i) return !0;
				return !1
			}, Fu.prototype.finish = function() {
				for (var t in this.replaysByZIndex_) {
					var e, i = this.replaysByZIndex_[t];
					for (e in i) i[e].finish()
				}
			}, Fu.prototype.forEachFeatureAtCoordinate = function(t, e, i, r, o, n, s) {
				var a, h = 2 * (r = Math.round(r)) + 1,
					l = oi(this.hitDetectionTransform_, r + .5, r + .5, 1 / e, -1 / e, -i, -t[0], -t[
					1]),
					u = this.hitDetectionContext_;
				u.canvas.width !== h || u.canvas.height !== h ? (u.canvas.width = h, u.canvas.height =
					h) : u.clearRect(0, 0, h, h), void 0 !== this.renderBuffer_ && (Pt(a = [1 / 0,
					1 / 0, -1 / 0, -1 / 0
				], t), gt(a, e * (this.renderBuffer_ + r), a));
				var p, c, d = function(t) {
					if (void 0 !== Mu[t]) return Mu[t];
					for (var e = 2 * t + 1, i = new Array(e), r = 0; r < e; r++) i[r] = new Array(
					e);
					for (var o = t, n = 0, s = 0; n <= o;) Au(i, t + o, t + n), Au(i, t + n, t + o),
						Au(i, t - n, t + o), Au(i, t - o, t + n), Au(i, t - o, t - n), Au(i, t - n,
							t - o), Au(i, t + n, t - o), Au(i, t + o, t - n), 0 < 2 * ((s += 1 + 2 *
							++n) - o) + 1 && (s += 1 - 2 * --o);
					return Mu[t] = i
				}(r);

				function _(t) {
					for (var e = u.getImageData(0, 0, h, h).data, i = 0; i < h; i++)
						for (var r = 0; r < h; r++)
							if (d[i][r] && 0 < e[4 * (r * h + i) + 3]) {
								var o = void 0;
								return p && (c == ou.IMAGE || c == ou.TEXT) && -1 === p.indexOf(t) || (
									o = n(t)), o || void u.clearRect(0, 0, h, h)
							}
				}
				this.declutterTree_ && (p = this.declutterTree_.all().map(function(t) {
					return t.value
				}));
				var f, g, y = Object.keys(this.replaysByZIndex_).map(Number);
				for (y.sort(rt), f = y.length - 1; 0 <= f; --f)
					for (var m = y[f].toString(), v = this.replaysByZIndex_[m], x = fu.length - 1; 0 <=
						x; --x)
						if (void 0 !== (g = v[c = fu[x]]))
							if (!s || c != ou.IMAGE && c != ou.TEXT) {
								if (E = g.replayHitDetection(u, l, i, o, _, a)) return E
							} else {
								var E = s[m];
								E ? E.push(g, l.slice(0)) : s[m] = [g, l.slice(0)]
							}
			}, Fu.prototype.getClipCoords = function(t) {
				var e = this.maxExtent_,
					i = e[0],
					r = e[1],
					o = e[2],
					e = e[3],
					r = [i, r, i, e, o, e, o, r];
				return Zt(r, 0, 8, 2, t, r), r
			}, Fu.prototype.getReplay = function(t, e) {
				var i = void 0 !== t ? t.toString() : "0",
					t = this.replaysByZIndex_[i];
				void 0 === t && (t = {}, this.replaysByZIndex_[i] = t);
				i = t[e];
				return void 0 === i && (i = new bu[e](this.tolerance_, this.maxExtent_, this
						.resolution_, this.pixelRatio_, this.overlaps_, this.declutterTree_), t[e] =
					i), i
			}, Fu.prototype.getReplays = function() {
				return this.replaysByZIndex_
			}, Fu.prototype.isEmpty = function() {
				return dt(this.replaysByZIndex_)
			}, Fu.prototype.replay = function(t, e, i, r, o, n, s) {
				var a = Object.keys(this.replaysByZIndex_).map(Number);
				a.sort(rt), t.save(), this.clip(t, e);
				for (var h = n || fu, l = 0, u = a.length; l < u; ++l)
					for (var p = a[l].toString(), c = this.replaysByZIndex_[p], d = 0, _ = h.length; d <
						_; ++d) {
						var f, g = h[d];
						void 0 !== (f = c[g]) && (!s || g != ou.IMAGE && g != ou.TEXT ? f.replay(t, e,
							i, r, o) : (g = s[p]) ? g.push(f, e.slice(0)) : s[p] = [f, e.slice(
							0)])
					}
				t.restore()
			}, Fu),
			Mu = {
				0: [
					[!0]
				]
			};

		function Fu(t, e, i, r, o, n, s) {
			Iu.call(this), this.declutterTree_ = n, this.declutterGroup_ = null, this.tolerance_ = t, this
				.maxExtent_ = e, this.overlaps_ = o, this.pixelRatio_ = r, this.resolution_ = i, this
				.renderBuffer_ = s, this.replaysByZIndex_ = {}, this.hitDetectionContext_ = ds(1, 1), this
				.hitDetectionTransform_ = [1, 0, 0, 1, 0, 0]
		}

		function Ou(t, e, i, r, o, n) {
			Lu.call(this, t, e, i, r, o, n), this.declutterGroup_, this.labels_ = null, this.text_ = "",
				this.textOffsetX_ = 0, this.textOffsetY_ = 0, this.textRotateWithView_ = void 0, this
				.textRotation_ = 0, this.textFillState_ = null, this.fillStates = {}, this
				.textStrokeState_ = null, this.strokeStates = {}, this.textState_ = {}, this
				.textStates = {}, this.textKey_ = "", this.fillKey_ = "", this.strokeKey_ = "", this
				.widths_ = {}, Qh.prune()
		}

		function Au(t, e, i) {
			var r, o = Math.floor(t.length / 2);
			if (o <= e)
				for (r = o; r < e; r++) t[r][i] = !0;
			else if (e < o)
				for (r = e + 1; r < o; r++) t[r][i] = !0
		}
		var Nu = Pu,
			Gu = .5,
			Du = {
				Point: function(t, e, i, r) {
					var o = i.getImage();
					if (o) {
						if (o.getImageState() != Yh.LOADED) return;
						var n = t.getReplay(i.getZIndex(), ou.IMAGE);
						n.setImageStyle(o, t.addDeclutter(!1)), n.drawPoint(e, r)
					}
					n = i.getText();
					n && ((i = t.getReplay(i.getZIndex(), ou.TEXT)).setTextStyle(n, t.addDeclutter(!!
						o)), i.drawText(e, r))
				},
				LineString: function(t, e, i, r) {
					var o = i.getStroke();
					o && ((n = t.getReplay(i.getZIndex(), ou.LINE_STRING)).setFillStrokeStyle(null, o),
						n.drawLineString(e, r));
					var n = i.getText();
					n && ((i = t.getReplay(i.getZIndex(), ou.TEXT)).setTextStyle(n, t.addDeclutter(!1)),
						i.drawText(e, r))
				},
				Polygon: function(t, e, i, r) {
					var o = i.getFill(),
						n = i.getStroke();
					(o || n) && ((s = t.getReplay(i.getZIndex(), ou.POLYGON)).setFillStrokeStyle(o, n),
						s.drawPolygon(e, r));
					var s = i.getText();
					s && ((i = t.getReplay(i.getZIndex(), ou.TEXT)).setTextStyle(s, t.addDeclutter(!1)),
						i.drawText(e, r))
				},
				MultiPoint: function(t, e, i, r) {
					var o = i.getImage();
					if (o) {
						if (o.getImageState() != Yh.LOADED) return;
						var n = t.getReplay(i.getZIndex(), ou.IMAGE);
						n.setImageStyle(o, t.addDeclutter(!1)), n.drawMultiPoint(e, r)
					}
					n = i.getText();
					n && ((i = t.getReplay(i.getZIndex(), ou.TEXT)).setTextStyle(n, t.addDeclutter(!!
						o)), i.drawText(e, r))
				},
				MultiLineString: function(t, e, i, r) {
					var o = i.getStroke();
					o && ((n = t.getReplay(i.getZIndex(), ou.LINE_STRING)).setFillStrokeStyle(null, o),
						n.drawMultiLineString(e, r));
					var n = i.getText();
					n && ((i = t.getReplay(i.getZIndex(), ou.TEXT)).setTextStyle(n, t.addDeclutter(!1)),
						i.drawText(e, r))
				},
				MultiPolygon: function(t, e, i, r) {
					var o = i.getFill(),
						n = i.getStroke();
					(n || o) && ((s = t.getReplay(i.getZIndex(), ou.POLYGON)).setFillStrokeStyle(o, n),
						s.drawMultiPolygon(e, r));
					var s = i.getText();
					s && ((i = t.getReplay(i.getZIndex(), ou.TEXT)).setTextStyle(s, t.addDeclutter(!1)),
						i.drawText(e, r))
				},
				GeometryCollection: function(t, e, i, r) {
					for (var o = e.getGeometriesArray(), n = 0, s = o.length; n < s; ++n)(0, Du[o[n]
						.getType()])(t, o[n], i, r)
				},
				Circle: function(t, e, i, r) {
					var o = i.getFill(),
						n = i.getStroke();
					(o || n) && ((s = t.getReplay(i.getZIndex(), ou.CIRCLE)).setFillStrokeStyle(o, n), s
						.drawCircle(e, r));
					var s = i.getText();
					s && ((i = t.getReplay(i.getZIndex(), ou.TEXT)).setTextStyle(s, t.addDeclutter(!1)),
						i.drawText(e, r))
				}
			};

		function ku(t, e) {
			return parseInt(ct(t), 10) - parseInt(ct(e), 10)
		}

		function ju(t, e) {
			e = Gu * t / e;
			return e * e
		}

		function Uu(t, e, i, r, o, n) {
			var s, a, h = !1,
				l = i.getImage();
			return l && ((s = l.getImageState()) == Yh.LOADED || s == Yh.ERROR ? l.unlistenImageChange(o,
				n) : (s == Yh.IDLE && l.load(), s = l.getImageState(), l.listenImageChange(o, n), h = !
					0)), a = t, t = e, e = r, (i = (r = i).getGeometryFunction()(t)) && (e = i
				.getSimplifiedGeometry(e), (r.getRenderer() ? function a(t, e, i, r) {
					if (e.getType() != Ht.GEOMETRY_COLLECTION) t.getReplay(i.getZIndex(), ou
						.DEFAULT).drawCustom(e, r, i.getRenderer());
					else
						for (var o = e.getGeometries(), n = 0, s = o.length; n < s; ++n) a(t, o[n],
							i, r)
				} : Du[e.getType()])(a, e, r, t)), h
		}
		var Yu, Bu = ((Yu = Dl) && (zu.__proto__ = Yu), ((zu.prototype = Object.create(Yu && Yu.prototype))
			.constructor = zu).prototype.disposeInternal = function() {
			x(Qh, A.CLEAR, this.handleFontsChanged_, this), Yu.prototype.disposeInternal.call(this)
		}, zu.prototype.compose = function(t, e, i) {
			var r = e.extent,
				o = e.pixelRatio,
				n = i.managed ? e.skippedFeatureUids : {},
				s = e.viewState,
				a = s.projection,
				h = s.rotation,
				l = a.getExtent(),
				u = this.getLayer().getSource(),
				p = this.getTransform(e, 0),
				c = i.extent,
				d = void 0 !== c;
			d && this.clip(t, e, c);
			var _ = this.replayGroup_;
			if (_ && !_.isEmpty()) {
				this.declutterTree_ && this.declutterTree_.clear();
				var f = this.getLayer(),
					g = 0,
					y = 0,
					s = 1 !== i.opacity,
					c = f.hasListener(qr),
					m = s || c ? (v = t.canvas.width, x = t.canvas.height, h && (g = ((f = Math
								.round(Math.sqrt(v * v + x * x))) - v) / 2, y = (f - x) / 2, v = x =
							f), this.context.canvas.width = v, this.context.canvas.height = x, this
						.context) : t,
					v = m.globalAlpha;
				s || (m.globalAlpha = i.opacity), m != t && m.translate(g, y);
				var x = e.viewHints,
					E = !(x[0] || x[1]),
					x = e.size[0] * o,
					o = e.size[1] * o;
				if (dl(m, -h, x / 2, o / 2), _.replay(m, p, h, n, E), u.getWrapX() && a
				.canWrapX() && !xt(l, r)) {
					for (var S, C = r[0], w = Bt(l), T = 0; C < l[0];) S = w * --T, p = this
						.getTransform(e, S), _.replay(m, p, h, n, E), C += w;
					for (T = 0, C = r[2]; C > l[2];) S = w * ++T, p = this.getTransform(e, S), _
						.replay(m, p, h, n, E), C -= w
				}
				dl(m, h, x / 2, o / 2), c && this.dispatchRenderEvent(m, e, p), m != t && (s ? (c =
						t.globalAlpha, t.globalAlpha = i.opacity, t.drawImage(m.canvas, -g, -y),
						t.globalAlpha = c) : t.drawImage(m.canvas, -g, -y), m.translate(-g, -y)),
					s || (m.globalAlpha = v)
			}
			d && t.restore()
		}, zu.prototype.composeFrame = function(t, e, i) {
			var r = this.getTransform(t, 0);
			this.preCompose(i, t, r), this.compose(i, t, e), this.postCompose(i, t, e, r)
		}, zu.prototype.forEachFeatureAtCoordinate = function(t, e, i, r, o) {
			if (this.replayGroup_) {
				var n = e.viewState.resolution,
					e = e.viewState.rotation,
					s = this.getLayer(),
					a = {};
				return this.replayGroup_.forEachFeatureAtCoordinate(t, n, e, i, {}, function(t) {
					var e = ct(t);
					if (!(e in a)) return a[e] = !0, r.call(o, t, s)
				}, null)
			}
		}, zu.prototype.handleFontsChanged_ = function(t) {
			var e = this.getLayer();
			e.getVisible() && this.replayGroup_ && e.changed()
		}, zu.prototype.handleStyleImageChange_ = function(t) {
			this.renderIfReadyAndVisible()
		}, zu.prototype.prepareFrame = function(t, e) {
			var r = this.getLayer(),
				i = r.getSource(),
				o = t.viewHints[0],
				n = t.viewHints[1],
				s = r.getUpdateWhileAnimating(),
				a = r.getUpdateWhileInteracting();
			if (!this.dirty_ && !s && o || !a && n) return !0;
			var h = t.extent,
				l = t.viewState,
				s = l.projection,
				u = l.resolution,
				p = t.pixelRatio,
				o = r.getRevision(),
				a = r.getRenderBuffer(),
				n = r.getRenderOrder();
			void 0 === n && (n = ku);
			h = gt(h, a * u), a = l.projection.getExtent();
			if (i.getWrapX() && l.projection.canWrapX() && !xt(a, t.extent) && (t = Bt(a), t = Math
					.max(Bt(h) / 2, t), h[0] = a[0] - t, h[2] = a[2] + t), !this.dirty_ && this
				.renderedResolution_ == u && this.renderedRevision_ == o && this
				.renderedRenderOrder_ == n && xt(this.renderedExtent_, h)) return !(this
				.replayGroupChanged = !1);
			this.replayGroup_ = null, this.dirty_ = !1;
			var c = new Nu(Gu * u / p, h, u, p, i.getOverlaps(), this.declutterTree_, r
				.getRenderBuffer());
			i.loadFeatures(h, u, s);
			var d = function(t) {
				var e, i = t.getStyleFunction() || r.getStyleFunction();
				i && (e = i(t, u)), e && (e = this.renderFeature(t, u, p, e, c), this.dirty_ =
					this.dirty_ || e)
			}.bind(this);
			if (n) {
				var _ = [];
				i.forEachFeatureInExtent(h, function(t) {
					_.push(t)
				}), _.sort(n);
				for (var f = 0, g = _.length; f < g; ++f) d(_[f])
			} else i.forEachFeatureInExtent(h, d);
			return c.finish(), this.renderedResolution_ = u, this.renderedRevision_ = o, this
				.renderedRenderOrder_ = n, this.renderedExtent_ = h, this.replayGroup_ = c, this
				.replayGroupChanged = !0
		}, zu.prototype.renderFeature = function(t, e, i, r, o) {
			if (!r) return !1;
			var n = !1;
			if (Array.isArray(r))
				for (var s = 0, a = r.length; s < a; ++s) n = Uu(o, t, r[s], ju(e, i), this
					.handleStyleImageChange_, this) || n;
			else n = Uu(o, t, r, ju(e, i), this.handleStyleImageChange_, this);
			return n
		}, zu);

		function zu(t) {
			Yu.call(this, t), this.declutterTree_ = t.getDeclutter() ? eu()(9, void 0) : null, this
				.dirty_ = !1, this.renderedRevision_ = -1, this.renderedResolution_ = NaN, this
				.renderedExtent_ = [1 / 0, 1 / 0, -1 / 0, -1 / 0], this.renderedRenderOrder_ = null, this
				.replayGroup_ = null, this.replayGroupChanged = !0, this.context = ds(), E(Qh, A.CLEAR, this
					.handleFontsChanged_, this)
		}
		Bu.handles = function(t) {
			return t.getType() === zh.VECTOR
		}, Bu.create = function(t, e) {
			return new Bu(e)
		};
		var Xu, Vu = Bu,
			Wu = "image",
			Ku = "hybrid",
			Hu = "vector",
			Zu = {
				image: [ou.POLYGON, ou.CIRCLE, ou.LINE_STRING, ou.IMAGE, ou.TEXT],
				hybrid: [ou.POLYGON, ou.LINE_STRING]
			},
			qu = {
				image: [ou.DEFAULT],
				hybrid: [ou.IMAGE, ou.TEXT, ou.DEFAULT],
				vector: fu
			},
			Ju = ((Xu = $l) && (Qu.__proto__ = Xu), ((Qu.prototype = Object.create(Xu && Xu.prototype))
				.constructor = Qu).prototype.disposeInternal = function() {
				x(Qh, A.CLEAR, this.handleFontsChanged_, this), Xu.prototype.disposeInternal.call(this)
			}, Qu.prototype.getTile = function(t, e, i, r, o) {
				i = Xu.prototype.getTile.call(this, t, e, i, r, o);
				return i.getState() === Bn.LOADED && (this.createReplayGroup_(i, r, o), this.context &&
					this.renderTileImage_(i, r, o)), i
			}, Qu.prototype.getTileImage = function(t) {
				var e = this.getLayer();
				return t.getImage(e)
			}, Qu.prototype.prepareFrame = function(t, e) {
				var i = this.getLayer().getRevision();
				return this.renderedLayerRevision_ != i && (this.renderedTiles.length = 0), this
					.renderedLayerRevision_ = i, Xu.prototype.prepareFrame.call(this, t, e)
			}, Qu.prototype.createReplayGroup_ = function(d, _, f) {
				var g = this,
					y = this.getLayer(),
					t = y.getRevision(),
					m = y.getRenderOrder() || null,
					v = d.getReplayState(y);
				if (v.dirty || v.renderedRevision != t || v.renderedRenderOrder != m) {
					for (var x = y.getSource(), E = x.getTileGrid(), S = x.getTileGridForProjection(f)
							.getResolution(d.tileCoord[0]), C = d.extent, e = 0, i = d.tileKeys
							.length; e < i; ++e) ! function(t) {
						var e = d.getTile(d.tileKeys[t]);
						if (e.getState() == Bn.LOADED) {
							var t = e.tileCoord,
								i = E.getTileCoordExtent(t),
								t = jt(C, i),
								r = Lt(i, t) ? null : gt(t, y.getRenderBuffer() * S, g.tmpExtent),
								o = e.getProjection(),
								n = !1;
							Xe(f, o) || (n = !0, e.setProjection(f)), v.dirty = !1;
							var s = new Nu(0, t, S, _, x.getOverlaps(), g.declutterTree_, y
									.getRenderBuffer()),
								a = ju(S, _),
								h = function(t) {
									var e, i = t.getStyleFunction() || y.getStyleFunction();
									i && (e = i(t, S)), e && (e = this.renderFeature(t, a, e, s),
										this.dirty_ = this.dirty_ || e, v.dirty = v.dirty || e)
								},
								l = e.getFeatures();
							m && m !== v.renderedRenderOrder && l.sort(m);
							for (var u = 0, p = l.length; u < p; ++u) {
								var c = l[u];
								n && (o.getUnits() == pe.TILE_PIXELS && (o.setWorldExtent(i), o
									.setExtent(e.getExtent())), c.getGeometry().transform(o,
									f)), r && !zt(r, c.getGeometry().getExtent()) || h.call(g,
									c)
							}
							s.finish(), e.setReplayGroup(y, d.tileCoord.toString(), s)
						}
					}(e);
					v.renderedRevision = t, v.renderedRenderOrder = m
				}
			}, Qu.prototype.forEachFeatureAtCoordinate = function(t, e, i, r, o) {
				var n = e.viewState.resolution,
					s = e.viewState.rotation;
				i = null == i ? 0 : i;
				for (var a, h = this.getLayer(), l = {}, u = this.renderedTiles, p = 0, c = u
					.length; p < c; ++p) {
					var d = u[p];
					if (vt(a = gt(d.extent, i * n, a), t))
						for (var _ = 0, f = d.tileKeys.length; _ < f; ++_) {
							var g, y = d.getTile(d.tileKeys[_]);
							y.getState() == Bn.LOADED && (y = y.getReplayGroup(h, d.tileCoord
							.toString()), g = g || y.forEachFeatureAtCoordinate(t, n, s, i, {},
								function(t) {
									var e = ct(t);
									if (!(e in l)) return l[e] = !0, r.call(o, t, h)
								}, null))
						}
				}
				return g
			}, Qu.prototype.getReplayTransform_ = function(t, e) {
				var i = this.getLayer().getSource().getTileGrid(),
					r = t.tileCoord,
					o = i.getResolution(r[0]),
					n = e.viewState,
					s = e.pixelRatio,
					a = n.resolution / s,
					t = i.getTileCoordExtent(r, this.tmpExtent),
					i = n.center,
					r = Ut(t),
					t = e.size,
					e = Math.round(s * t[0] / 2),
					t = Math.round(s * t[1] / 2);
				return oi(this.tmpTransform_, e, t, o / a, o / a, n.rotation, (r[0] - i[0]) / o, (i[1] -
					r[1]) / o)
			}, Qu.prototype.handleFontsChanged_ = function(t) {
				var e = this.getLayer();
				e.getVisible() && void 0 !== this.renderedLayerRevision_ && e.changed()
			}, Qu.prototype.handleStyleImageChange_ = function(t) {
				this.renderIfReadyAndVisible()
			}, Qu.prototype.postCompose = function(t, e, i) {
				var r = this.getLayer(),
					o = r.getRenderMode();
				if (o != Wu) {
					var n, s, a = r.getDeclutter() ? {} : null,
						h = r.getSource(),
						l = qu[o],
						u = e.pixelRatio,
						p = e.viewState.rotation,
						o = e.size;
					p && dl(t, -p, n = Math.round(u * o[0] / 2), s = Math.round(u * o[1] / 2)), a &&
						this.declutterTree_.clear();
					for (var o = e.viewHints, c = !(o[0] || o[1]), d = this.renderedTiles, _ = h
							.getTileGridForProjection(e.viewState.projection), f = [], g = [], y = d
							.length - 1; 0 <= y; --y) {
						var m = d[y];
						if (m.getState() != Bn.ABORT)
							for (var v = m.tileCoord, x = _.getTileCoordExtent(v, this.tmpExtent)[0] - m
									.extent[0], E = void 0, S = 0, C = m.tileKeys.length; S < C; ++S) {
								var w = m.getTile(m.tileKeys[S]);
								if (w.getState() == Bn.LOADED) {
									var T = w.getReplayGroup(r, v.toString());
									if (T && T.hasReplays(l)) {
										E = E || this.getTransform(e, x);
										var R = w.tileCoord[0],
											I = T.getClipCoords(E);
										t.save(), t.globalAlpha = i.opacity;
										for (var L = 0, b = f.length; L < b; ++L) {
											var P = f[L];
											R < g[L] && (t.beginPath(), t.moveTo(I[0], I[1]), t.lineTo(
												I[2], I[3]), t.lineTo(I[4], I[5]), t.lineTo(I[
												6], I[7]), t.moveTo(P[6], P[7]), t.lineTo(P[4],
												P[5]), t.lineTo(P[2], P[3]), t.lineTo(P[0], P[
												1]), t.clip())
										}
										T.replay(t, E, p, {}, c, l, a), t.restore(), f.push(I), g.push(
											R)
									}
								}
							}
					}
					a && function(t, e, i, r) {
						for (var o = Object.keys(t).map(Number).sort(rt), n = {}, s = 0, a = o
								.length; s < a; ++s)
							for (var h = t[o[s].toString()], l = 0, u = h.length; l < u;) {
								var p = h[l++],
									c = h[l++];
								p.replay(e, c, i, n, r)
							}
					}(a, t, p, c), p && dl(t, p, n, s)
				}
				Xu.prototype.postCompose.call(this, t, e, i)
			}, Qu.prototype.renderFeature = function(t, e, i, r) {
				if (!i) return !1;
				var o = !1;
				if (Array.isArray(i))
					for (var n = 0, s = i.length; n < s; ++n) o = Uu(r, t, i[n], e, this
						.handleStyleImageChange_, this) || o;
				else o = Uu(r, t, i, e, this.handleStyleImageChange_, this);
				return o
			}, Qu.prototype.renderTileImage_ = function(t, e, i) {
				var r = this.getLayer(),
					o = t.getReplayState(r),
					n = r.getRevision(),
					s = Zu[r.getRenderMode()];
				if (s && o.renderedTileRevision !== n) {
					o.renderedTileRevision = n;
					var a = t.wrappedTileCoord,
						h = a[0],
						o = r.getSource(),
						n = o.getTileGridForProjection(i),
						l = n.getResolution(h),
						u = t.getContext(r),
						i = o.getTilePixelSize(h, e, i);
					u.canvas.width = i[0], u.canvas.height = i[1];
					for (var p = n.getTileCoordExtent(a, this.tmpExtent), c = 0, d = t.tileKeys
						.length; c < d; ++c) {
						var _, f, g = t.getTile(t.tileKeys[c]);
						g.getState() == Bn.LOADED && (_ = e / l, ii(f = qe(this.tmpTransform_), _, -_),
							ri(f, -p[0], -p[3]), g.getReplayGroup(r, t.tileCoord.toString()).replay(
								u, f, 0, {}, !0, s))
					}
				}
			}, Qu);

		function Qu(t) {
			Xu.call(this, t, !0), this.declutterTree_ = t.getDeclutter() ? eu()(9, void 0) : null, this
				.dirty_ = !1, this.renderedLayerRevision_, this.tmpTransform_ = [1, 0, 0, 1, 0, 0];
			t = t.getRenderMode();
			this.zDirection = t === Hu ? 1 : 0, t !== Hu && (this.context = ds()), E(Qh, A.CLEAR, this
				.handleFontsChanged_, this)
		}
		Ju.handles = function(t) {
			return t.getType() === zh.VECTOR_TILE
		}, Ju.create = function(t, e) {
			return new Ju(e)
		};
		var $u, tp, ep, ip, rp = Ju,
			op = ((tp = js) && (Tp.__proto__ = tp), ((Tp.prototype = Object.create(tp && tp.prototype))
				.constructor = Tp).prototype.createRenderer = function() {
				var t = new Nl(this);
				return t.registerLayerRenderers([Wl, $l, Vu, rp]), t
			}, Tp),
			np = "bottom-left",
			sp = "bottom-center",
			ap = "bottom-right",
			hp = "center-left",
			lp = "center-center",
			up = "center-right",
			pp = "top-left",
			cp = "top-center",
			dp = "top-right",
			_p = "element",
			fp = "map",
			gp = "offset",
			yp = "position",
			mp = "positioning",
			vp = (($u = K) && (wp.__proto__ = $u), ((wp.prototype = Object.create($u && $u.prototype))
				.constructor = wp).prototype.getElement = function() {
				return this.get(_p)
			}, wp.prototype.getId = function() {
				return this.id
			}, wp.prototype.getMap = function() {
				return this.get(fp)
			}, wp.prototype.getOffset = function() {
				return this.get(gp)
			}, wp.prototype.getPosition = function() {
				return this.get(yp)
			}, wp.prototype.getPositioning = function() {
				return this.get(mp)
			}, wp.prototype.handleElementChanged = function() {
				gs(this.element);
				var t = this.getElement();
				t && this.element.appendChild(t)
			}, wp.prototype.handleMapChanged = function() {
				this.mapPostrenderListenerKey && (fs(this.element), S(this.mapPostrenderListenerKey),
					this.mapPostrenderListenerKey = null);
				var t = this.getMap();
				t && (this.mapPostrenderListenerKey = E(t, Dn, this.render, this), this
					.updatePixelPosition(), t = this.stopEvent ? t.getOverlayContainerStopEvent() :
					t.getOverlayContainer(), this.insertFirst ? t.insertBefore(this.element, t
						.childNodes[0] || null) : t.appendChild(this.element))
			}, wp.prototype.render = function() {
				this.updatePixelPosition()
			}, wp.prototype.handleOffsetChanged = function() {
				this.updatePixelPosition()
			}, wp.prototype.handlePositionChanged = function() {
				this.updatePixelPosition(), this.get(yp) && this.autoPan && this.panIntoView()
			}, wp.prototype.handlePositioningChanged = function() {
				this.updatePixelPosition()
			}, wp.prototype.setElement = function(t) {
				this.set(_p, t)
			}, wp.prototype.setMap = function(t) {
				this.set(fp, t)
			}, wp.prototype.setOffset = function(t) {
				this.set(gp, t)
			}, wp.prototype.setPosition = function(t) {
				this.set(yp, t)
			}, wp.prototype.panIntoView = function() {
				var t, e, i, r, o, n, s = this.getMap();
				s && s.getTargetElement() && (e = this.getRect(s.getTargetElement(), s.getSize()), t =
					this.getElement(), o = this.getRect(t, [(o = t.offsetWidth, n =
						getComputedStyle(t), o + (parseInt(n.marginLeft, 10) + parseInt(n
							.marginRight, 10))), (i = t.offsetHeight, r = getComputedStyle(
						t), i + (parseInt(r.marginTop, 10) + parseInt(r.marginBottom,
						10)))]), n = this.autoPanMargin, xt(e, o) || (t = o[0] - e[0], i = e[2] - o[
							2], r = o[1] - e[1], e = e[3] - o[3], o = [0, 0], t < 0 ? o[0] = t - n :
						i < 0 && (o[0] = Math.abs(i) + n), r < 0 ? o[1] = r - n : e < 0 && (o[1] =
							Math.abs(e) + n), 0 === o[0] && 0 === o[1] || (n = s.getView()
							.getCenter(), o = [(n = s.getPixelFromCoordinate(n))[0] + o[0], n[1] +
								o[1]
							], s.getView().animate({
								center: s.getCoordinateFromPixel(o),
								duration: this.autoPanAnimation.duration,
								easing: this.autoPanAnimation.easing
							}))))
			}, wp.prototype.getRect = function(t, e) {
				var i = t.getBoundingClientRect(),
					t = i.left + window.pageXOffset,
					i = i.top + window.pageYOffset;
				return [t, i, t + e[0], i + e[1]]
			}, wp.prototype.setPositioning = function(t) {
				this.set(mp, t)
			}, wp.prototype.setVisible = function(t) {
				this.rendered.visible !== t && (this.element.style.display = t ? "" : "none", this
					.rendered.visible = t)
			}, wp.prototype.updatePixelPosition = function() {
				var t = this.getMap(),
					e = this.getPosition();
				t && t.isRendered() && e ? (e = t.getPixelFromCoordinate(e), t = t.getSize(), this
					.updateRenderedPosition(e, t)) : this.setVisible(!1)
			}, wp.prototype.updateRenderedPosition = function(t, e) {
				var i = this.element.style,
					r = this.getOffset(),
					o = this.getPositioning();
				this.setVisible(!0);
				var n = r[0],
					s = r[1];
				o == ap || o == up || o == dp ? ("" !== this.rendered.left_ && (this.rendered.left_ = i
							.left = ""), r = Math.round(e[0] - t[0] - n) + "px", this.rendered.right_ !=
						r && (this.rendered.right_ = i.right = r)) : ("" !== this.rendered.right_ && (
							this.rendered.right_ = i.right = ""), o != sp && o != lp && o != cp || (n -=
							this.element.offsetWidth / 2), n = Math.round(t[0] + n) + "px", this
						.rendered.left_ != n && (this.rendered.left_ = i.left = n)), o == np || o ==
					sp || o == ap ? ("" !== this.rendered.top_ && (this.rendered.top_ = i.top = ""), e =
						Math.round(e[1] - t[1] - s) + "px", this.rendered.bottom_ != e && (this.rendered
							.bottom_ = i.bottom = e)) : ("" !== this.rendered.bottom_ && (this.rendered
							.bottom_ = i.bottom = ""), o != hp && o != lp && o != up || (s -= this
							.element.offsetHeight / 2), s = Math.round(t[1] + s) + "px", this.rendered
						.top_ != s && (this.rendered.top_ = i.top = s))
			}, wp.prototype.getOptions = function() {
				return this.options
			}, wp),
			xp = 10242,
			Ep = 10243,
			Sp = 3553,
			Cp = ["experimental-webgl", "webgl", "webkit-3d", "moz-webgl"];

		function wp(t) {
			$u.call(this), this.options = t, this.id = t.id, this.insertFirst = void 0 === t.insertFirst ||
				t.insertFirst, this.stopEvent = void 0 === t.stopEvent || t.stopEvent, this.element =
				document.createElement("div"), this.element.className = void 0 !== t.className ? t
				.className : "ol-overlay-container ol-selectable", this.element.style.position = "absolute",
				this.autoPan = void 0 !== t.autoPan && t.autoPan, this.autoPanAnimation = t
				.autoPanAnimation || {}, this.autoPanMargin = void 0 !== t.autoPanMargin ? t.autoPanMargin :
				20, this.rendered = {
					bottom_: "",
					left_: "",
					right_: "",
					top_: "",
					visible: !0
				}, this.mapPostrenderListenerKey = null, E(this, z(_p), this.handleElementChanged, this), E(
					this, z(fp), this.handleMapChanged, this), E(this, z(gp), this.handleOffsetChanged,
					this), E(this, z(yp), this.handlePositionChanged, this), E(this, z(mp), this
					.handlePositioningChanged, this), void 0 !== t.element && this.setElement(t.element),
				this.setOffset(void 0 !== t.offset ? t.offset : [0, 0]), this.setPositioning(void 0 !== t
					.positioning ? t.positioning : pp), void 0 !== t.position && this.setPosition(t
					.position)
		}

		function Tp(t) {
			(t = y({}, t)).controls || (t.controls = ca()), t.interactions || (t.interactions = Ih()), tp
				.call(this, t)
		}

		function Rp(t, e) {
			for (var i = Cp.length, r = 0; r < i; ++r) try {
				var o = t.getContext(Cp[r], e);
				if (o) return o
			} catch (t) {}
			return null
		}
		if ("undefined" != typeof window && "WebGLRenderingContext" in window) try {
			var Ip = Rp(document.createElement("canvas"), {
				failIfMajorPerformanceCaveat: !0
			});
			Ip && (ep = Ip.getParameter(Ip.MAX_TEXTURE_SIZE), ip = Ip.getSupportedExtensions())
		} catch (d) {}
		var Lp = function(t) {
			this.source_ = t
		};
		Lp.prototype.isAnimated = function() {
			return !1
		}, Lp.prototype.getType = function() {
			return a()
		}, Lp.prototype.getSource = function() {
			return this.source_
		};
		var bp, Pp, Mp = Lp,
			Fp = ((Pp = Mp) && (kp.__proto__ = Pp), ((kp.prototype = Object.create(Pp && Pp.prototype))
				.constructor = kp).prototype.getType = function() {
				return 35632
			}, kp),
			Op = ((bp = Mp) && (Dp.__proto__ = bp), ((Dp.prototype = Object.create(bp && bp.prototype))
				.constructor = Dp).prototype.getType = function() {
				return 35633
			}, Dp),
			Ap = new Fp(
				"precision mediump float;\nvarying vec2 v_center;\nvarying vec2 v_offset;\nvarying float v_halfWidth;\nvarying float v_pixelRatio;\n\n\n\nuniform float u_opacity;\nuniform vec4 u_fillColor;\nuniform vec4 u_strokeColor;\nuniform vec2 u_size;\n\nvoid main(void) {\n  vec2 windowCenter = vec2((v_center.x + 1.0) / 2.0 * u_size.x * v_pixelRatio,\n      (v_center.y + 1.0) / 2.0 * u_size.y * v_pixelRatio);\n  vec2 windowOffset = vec2((v_offset.x + 1.0) / 2.0 * u_size.x * v_pixelRatio,\n      (v_offset.y + 1.0) / 2.0 * u_size.y * v_pixelRatio);\n  float radius = length(windowCenter - windowOffset);\n  float dist = length(windowCenter - gl_FragCoord.xy);\n  if (dist > radius + v_halfWidth) {\n    if (u_strokeColor.a == 0.0) {\n      gl_FragColor = u_fillColor;\n    } else {\n      gl_FragColor = u_strokeColor;\n    }\n    gl_FragColor.a = gl_FragColor.a - (dist - (radius + v_halfWidth));\n  } else if (u_fillColor.a == 0.0) {\n    // Hooray, no fill, just stroke. We can use real antialiasing.\n    gl_FragColor = u_strokeColor;\n    if (dist < radius - v_halfWidth) {\n      gl_FragColor.a = gl_FragColor.a - (radius - v_halfWidth - dist);\n    }\n  } else {\n    gl_FragColor = u_fillColor;\n    float strokeDist = radius - v_halfWidth;\n    float antialias = 2.0 * v_pixelRatio;\n    if (dist > strokeDist) {\n      gl_FragColor = u_strokeColor;\n    } else if (dist >= strokeDist - antialias) {\n      float step = smoothstep(strokeDist - antialias, strokeDist, dist);\n      gl_FragColor = mix(u_fillColor, u_strokeColor, step);\n    }\n  }\n  gl_FragColor.a = gl_FragColor.a * u_opacity;\n  if (gl_FragColor.a <= 0.0) {\n    discard;\n  }\n}\n"
				),
			Np = new Op(
				"varying vec2 v_center;\nvarying vec2 v_offset;\nvarying float v_halfWidth;\nvarying float v_pixelRatio;\n\n\nattribute vec2 a_position;\nattribute float a_instruction;\nattribute float a_radius;\n\nuniform mat4 u_projectionMatrix;\nuniform mat4 u_offsetScaleMatrix;\nuniform mat4 u_offsetRotateMatrix;\nuniform float u_lineWidth;\nuniform float u_pixelRatio;\n\nvoid main(void) {\n  mat4 offsetMatrix = u_offsetScaleMatrix * u_offsetRotateMatrix;\n  v_center = vec4(u_projectionMatrix * vec4(a_position, 0.0, 1.0)).xy;\n  v_pixelRatio = u_pixelRatio;\n  float lineWidth = u_lineWidth * u_pixelRatio;\n  v_halfWidth = lineWidth / 2.0;\n  if (lineWidth == 0.0) {\n    lineWidth = 2.0 * u_pixelRatio;\n  }\n  vec2 offset;\n  // Radius with anitaliasing (roughly).\n  float radius = a_radius + 3.0 * u_pixelRatio;\n  // Until we get gl_VertexID in WebGL, we store an instruction.\n  if (a_instruction == 0.0) {\n    // Offsetting the edges of the triangle by lineWidth / 2 is necessary, however\n    // we should also leave some space for the antialiasing, thus we offset by lineWidth.\n    offset = vec2(-1.0, 1.0);\n  } else if (a_instruction == 1.0) {\n    offset = vec2(-1.0, -1.0);\n  } else if (a_instruction == 2.0) {\n    offset = vec2(1.0, -1.0);\n  } else {\n    offset = vec2(1.0, 1.0);\n  }\n\n  gl_Position = u_projectionMatrix * vec4(a_position + offset * radius, 0.0, 1.0) +\n      offsetMatrix * vec4(offset * lineWidth, 0.0, 0.0);\n  v_offset = vec4(u_projectionMatrix * vec4(a_position.x + a_radius, a_position.y,\n      0.0, 1.0)).xy;\n\n  if (distance(v_center, v_offset) > 20000.0) {\n    gl_Position = vec4(v_center, 0.0, 1.0);\n  }\n}\n\n\n"
				),
			Gp = function(t, e) {
				this.u_projectionMatrix = t.getUniformLocation(e, "u_projectionMatrix"), this
					.u_offsetScaleMatrix = t.getUniformLocation(e, "u_offsetScaleMatrix"), this
					.u_offsetRotateMatrix = t.getUniformLocation(e, "u_offsetRotateMatrix"), this
					.u_lineWidth = t.getUniformLocation(e, "u_lineWidth"), this.u_pixelRatio = t
					.getUniformLocation(e, "u_pixelRatio"), this.u_opacity = t.getUniformLocation(e,
						"u_opacity"), this.u_fillColor = t.getUniformLocation(e, "u_fillColor"), this
					.u_strokeColor = t.getUniformLocation(e, "u_strokeColor"), this.u_size = t
					.getUniformLocation(e, "u_size"), this.a_position = t.getAttribLocation(e,
					"a_position"), this.a_instruction = t.getAttribLocation(e, "a_instruction"), this
					.a_radius = t.getAttribLocation(e, "a_radius")
			};

		function Dp(t) {
			bp.call(this, t)
		}

		function kp(t) {
			Pp.call(this, t)
		}

		function jp(t, e) {
			return t[0] = e[0], t[1] = e[1], t[4] = e[2], t[5] = e[3], t[12] = e[4], t[13] = e[5], t
		}
		var Up, Yp = ((Up = vl) && (Hp.__proto__ = Up), ((Hp.prototype = Object.create(Up && Up.prototype))
				.constructor = Hp).prototype.getDeleteResourcesFunction = function(t) {
				return a()
			}, Hp.prototype.finish = function(t) {
				a()
			}, Hp.prototype.setUpProgram = function(t, e, i, r) {
				return a()
			}, Hp.prototype.shutDownProgram = function(t, e) {
				a()
			}, Hp.prototype.drawReplay = function(t, e, i, r) {
				a()
			}, Hp.prototype.drawHitDetectionReplayOneByOne = function(t, e, i, r, o) {
				return a()
			}, Hp.prototype.drawHitDetectionReplay = function(t, e, i, r, o, n) {
				return o ? this.drawHitDetectionReplayOneByOne(t, e, i, r, n) : this
					.drawHitDetectionReplayAll(t, e, i, r)
			}, Hp.prototype.drawHitDetectionReplayAll = function(t, e, i, r) {
				return t.clear(t.COLOR_BUFFER_BIT | t.DEPTH_BUFFER_BIT), this.drawReplay(t, e, i, !0),
					r(null) || void 0
			}, Hp.prototype.replay = function(t, e, i, r, o, n, s, a, h, l, u) {
				var p, c, d, _, f, g, y, m, v = t.getGL();
				this.lineStringReplay && (p = v.isEnabled(v.STENCIL_TEST), c = v.getParameter(v
						.STENCIL_FUNC), d = v.getParameter(v.STENCIL_VALUE_MASK), _ = v
					.getParameter(v.STENCIL_REF), f = v.getParameter(v.STENCIL_WRITEMASK), g = v
					.getParameter(v.STENCIL_FAIL), y = v.getParameter(v.STENCIL_PASS_DEPTH_PASS),
					m = v.getParameter(v.STENCIL_PASS_DEPTH_FAIL), v.enable(v.STENCIL_TEST), v
					.clear(v.STENCIL_BUFFER_BIT), v.stencilMask(255), v.stencilFunc(v.ALWAYS, 1,
						255), v.stencilOp(v.KEEP, v.KEEP, v.REPLACE), this.lineStringReplay.replay(
						t, e, i, r, o, n, s, a, h, l, u), v.stencilMask(0), v.stencilFunc(v
						.NOTEQUAL, 1, 255)), t.bindBuffer(34962, this.verticesBuffer), t.bindBuffer(
					34963, this.indicesBuffer);
				var x = this.setUpProgram(v, t, o, n),
					n = qe(this.projectionMatrix_);
				ii(n, 2 / (i * o[0]), 2 / (i * o[1])), ei(n, -r), ri(n, -(e[0] - this.origin[0]), -(e[
					1] - this.origin[1]));
				e = qe(this.offsetScaleMatrix_);
				ii(e, 2 / o[0], 2 / o[1]);
				var E, o = qe(this.offsetRotateMatrix_);
				return 0 !== r && ei(o, -r), v.uniformMatrix4fv(x.u_projectionMatrix, !1, jp(this
						.tmpMat4_, n)), v.uniformMatrix4fv(x.u_offsetScaleMatrix, !1, jp(this.tmpMat4_,
						e)), v.uniformMatrix4fv(x.u_offsetRotateMatrix, !1, jp(this.tmpMat4_, o)), v
					.uniform1f(x.u_opacity, s), void 0 === h ? this.drawReplay(v, t, a, !1) : E = this
					.drawHitDetectionReplay(v, t, a, h, l, u), this.shutDownProgram(v, x), this
					.lineStringReplay && (p || v.disable(v.STENCIL_TEST), v.clear(v.STENCIL_BUFFER_BIT),
						v.stencilFunc(c, _, d), v.stencilMask(f), v.stencilOp(g, m, y)), E
			}, Hp.prototype.drawElements = function(t, e, i, r) {
				var o = e.hasOESElementIndexUint ? 5125 : 5123,
					r = r - i,
					e = i * (e.hasOESElementIndexUint ? 4 : 2);
				t.drawElements(4, r, o, e)
			}, Hp),
			Bp = [0, 0, 0, 1],
			zp = [],
			Xp = [0, 0, 0, 1],
			Vp = Number.EPSILON || 2220446049250313e-31,
			Wp = function(t, e, i, r, o, n) {
				e = (i - t) * (n - e) - (o - t) * (r - e);
				return e <= Vp && -Vp <= e ? void 0 : 0 < e
			},
			Kp = function(t, e) {
				this.arr_ = void 0 !== t ? t : [], this.usage_ = void 0 !== e ? e : 35044
			};

		function Hp(t, e) {
			Up.call(this), this.tolerance = t, this.maxExtent = e, this.origin = Gt(e), this
				.projectionMatrix_ = [1, 0, 0, 1, 0, 0], this.offsetRotateMatrix_ = [1, 0, 0, 1, 0, 0], this
				.offsetScaleMatrix_ = [1, 0, 0, 1, 0, 0], this.tmpMat4_ = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1,
					0, 0, 0, 0, 1
				], this.indices = [], this.indicesBuffer = null, this.startIndices = [], this
				.startIndicesFeature = [], this.vertices = [], this.verticesBuffer = null, this
				.lineStringReplay = void 0
		}
		Kp.prototype.getArray = function() {
			return this.arr_
		}, Kp.prototype.getUsage = function() {
			return this.usage_
		};
		var Zp, qp = Kp,
			Jp = ((Zp = Yp) && (rc.__proto__ = Zp), ((rc.prototype = Object.create(Zp && Zp.prototype))
				.constructor = rc).prototype.drawCoordinates_ = function(t, e, i, r) {
				for (var o = this.vertices.length, n = this.indices.length, s = o / 4, a = e, h = i; a <
					h; a += r) this.vertices[o++] = t[a], this.vertices[o++] = t[a + 1], this.vertices[
						o++] = 0, this.vertices[o++] = this.radius_, this.vertices[o++] = t[a], this
					.vertices[o++] = t[a + 1], this.vertices[o++] = 1, this.vertices[o++] = this
					.radius_, this.vertices[o++] = t[a], this.vertices[o++] = t[a + 1], this.vertices[
						o++] = 2, this.vertices[o++] = this.radius_, this.vertices[o++] = t[a], this
					.vertices[o++] = t[a + 1], this.vertices[o++] = 3, this.vertices[o++] = this
					.radius_, this.indices[n++] = s, this.indices[n++] = s + 1, this.indices[n++] = s +
					2, this.indices[n++] = s + 2, this.indices[n++] = s + 3, this.indices[n++] = s, s +=
					4
			}, rc.prototype.drawCircle = function(t, e) {
				var i = t.getRadius(),
					r = t.getStride();
				i ? (this.startIndices.push(this.indices.length), this.startIndicesFeature.push(e), this
						.state_.changed && (this.styleIndices_.push(this.indices.length), this.state_
							.changed = !1), this.radius_ = i, t = qt(t = t.getFlatCoordinates(), 0, 2,
							r, -this.origin[0], -this.origin[1]), this.drawCoordinates_(t, 0, 2, r)) :
					this.state_.changed && (this.styles_.pop(), this.styles_.length) && (r = this
						.styles_[this.styles_.length - 1], this.state_.fillColor = r[0], this.state_
						.strokeColor = r[1], this.state_.lineWidth = r[2], this.state_.changed = !1)
			}, rc.prototype.finish = function(t) {
				this.verticesBuffer = new qp(this.vertices), this.indicesBuffer = new qp(this.indices),
					this.startIndices.push(this.indices.length), 0 === this.styleIndices_.length && 0 <
					this.styles_.length && (this.styles_ = []), this.vertices = null, this.indices =
					null
			}, rc.prototype.getDeleteResourcesFunction = function(t) {
				var e = this.verticesBuffer,
					i = this.indicesBuffer;
				return function() {
					t.deleteBuffer(e), t.deleteBuffer(i)
				}
			}, rc.prototype.setUpProgram = function(t, e, i, r) {
				var o, n = e.getProgram(Ap, Np);
				return this.defaultLocations_ ? o = this.defaultLocations_ : (o = new Gp(t, n), this
						.defaultLocations_ = o), e.useProgram(n), t.enableVertexAttribArray(o
						.a_position), t.vertexAttribPointer(o.a_position, 2, 5126, !1, 16, 0), t
					.enableVertexAttribArray(o.a_instruction), t.vertexAttribPointer(o.a_instruction, 1,
						5126, !1, 16, 8), t.enableVertexAttribArray(o.a_radius), t.vertexAttribPointer(o
						.a_radius, 1, 5126, !1, 16, 12), t.uniform2fv(o.u_size, i), t.uniform1f(o
						.u_pixelRatio, r), o
			}, rc.prototype.shutDownProgram = function(t, e) {
				t.disableVertexAttribArray(e.a_position), t.disableVertexAttribArray(e.a_instruction), t
					.disableVertexAttribArray(e.a_radius)
			}, rc.prototype.drawReplay = function(t, e, i, r) {
				var o, n, s, a;
				if (dt(i))
					for (s = this.startIndices[this.startIndices.length - 1], o = this.styleIndices_
						.length - 1; 0 <= o; --o) n = this.styleIndices_[o], a = this.styles_[o], this
						.setFillStyle_(t, a[0]), this.setStrokeStyle_(t, a[1], a[2]), this.drawElements(
							t, e, n, s), s = n;
				else this.drawReplaySkipping_(t, e, i)
			}, rc.prototype.drawHitDetectionReplayOneByOne = function(t, e, i, r, o) {
				for (var n, s, a, h = this.startIndices.length - 2, l = this.startIndices[h + 1], u =
						this.styleIndices_.length - 1; 0 <= u; --u)
					for (s = this.styles_[u], this.setFillStyle_(t, s[0]), this.setStrokeStyle_(t, s[1],
							s[2]), a = this.styleIndices_[u]; 0 <= h && this.startIndices[h] >= a;) {
						if (n = this.startIndices[h], void 0 === i[ct(p = this.startIndicesFeature[
							h])] && p.getGeometry() && (void 0 === o || zt(o, p.getGeometry()
							.getExtent()))) {
							t.clear(t.COLOR_BUFFER_BIT | t.DEPTH_BUFFER_BIT), this.drawElements(t, e, n,
								l);
							var p = r(p);
							if (p) return p
						}
						h--, l = n
					}
			}, rc.prototype.drawReplaySkipping_ = function(t, e, i) {
				for (var r, o, n, s, a = this.startIndices.length - 2, h = r = this.startIndices[a + 1],
						l = this.styleIndices_.length - 1; 0 <= l; --l) {
					for (o = this.styles_[l], this.setFillStyle_(t, o[0]), this.setStrokeStyle_(t, o[1],
							o[2]), n = this.styleIndices_[l]; 0 <= a && this.startIndices[a] >= n;) s =
						this.startIndices[a], i[ct(this.startIndicesFeature[a])] && (r !== h && this
							.drawElements(t, e, r, h), h = s), a--, r = s;
					r !== h && this.drawElements(t, e, r, h), r = h = n
				}
			}, rc.prototype.setFillStyle_ = function(t, e) {
				t.uniform4fv(this.defaultLocations_.u_fillColor, e)
			}, rc.prototype.setStrokeStyle_ = function(t, e, i) {
				t.uniform4fv(this.defaultLocations_.u_strokeColor, e), t.uniform1f(this
					.defaultLocations_.u_lineWidth, i)
			}, rc.prototype.setFillStrokeStyle = function(t, e) {
				var i, r = e ? (i = e.getLineDash(), this.state_.lineDash = i || zp, r = e
						.getLineDashOffset(), this.state_.lineDashOffset = r || 0, i = !((i = e
							.getColor()) instanceof CanvasGradient || i instanceof CanvasPattern) && oo(
							i).map(function(t, e) {
							return 3 != e ? t / 255 : t
						}) || Xp, void 0 !== (r = e.getWidth()) ? r : 1) : (i = [0, 0, 0, 0], 0),
					t = !((t = t ? t.getColor() : [0, 0, 0, 0]) instanceof CanvasGradient ||
						t instanceof CanvasPattern) && oo(t).map(function(t, e) {
						return 3 != e ? t / 255 : t
					}) || Bp;
				this.state_.strokeColor && _t(this.state_.strokeColor, i) && this.state_.fillColor &&
					_t(this.state_.fillColor, t) && this.state_.lineWidth === r || (this.state_
						.changed = !0, this.state_.fillColor = t, this.state_.strokeColor = i, this
						.state_.lineWidth = r, this.styles_.push([t, i, r]))
			}, rc),
			Qp = new Fp(
				"precision mediump float;\nvarying vec2 v_texCoord;\nvarying float v_opacity;\n\nuniform float u_opacity;\nuniform sampler2D u_image;\n\nvoid main(void) {\n  vec4 texColor = texture2D(u_image, v_texCoord);\n  gl_FragColor.rgb = texColor.rgb;\n  float alpha = texColor.a * v_opacity * u_opacity;\n  if (alpha == 0.0) {\n    discard;\n  }\n  gl_FragColor.a = alpha;\n}\n"
				),
			$p = new Op(
				"varying vec2 v_texCoord;\nvarying float v_opacity;\n\nattribute vec2 a_position;\nattribute vec2 a_texCoord;\nattribute vec2 a_offsets;\nattribute float a_opacity;\nattribute float a_rotateWithView;\n\nuniform mat4 u_projectionMatrix;\nuniform mat4 u_offsetScaleMatrix;\nuniform mat4 u_offsetRotateMatrix;\n\nvoid main(void) {\n  mat4 offsetMatrix = u_offsetScaleMatrix;\n  if (a_rotateWithView == 1.0) {\n    offsetMatrix = u_offsetScaleMatrix * u_offsetRotateMatrix;\n  }\n  vec4 offsets = offsetMatrix * vec4(a_offsets, 0.0, 0.0);\n  gl_Position = u_projectionMatrix * vec4(a_position, 0.0, 1.0) + offsets;\n  v_texCoord = a_texCoord;\n  v_opacity = a_opacity;\n}\n\n\n"
				),
			tc = function(t, e) {
				this.u_projectionMatrix = t.getUniformLocation(e, "u_projectionMatrix"), this
					.u_offsetScaleMatrix = t.getUniformLocation(e, "u_offsetScaleMatrix"), this
					.u_offsetRotateMatrix = t.getUniformLocation(e, "u_offsetRotateMatrix"), this
					.u_opacity = t.getUniformLocation(e, "u_opacity"), this.u_image = t.getUniformLocation(
						e, "u_image"), this.a_position = t.getAttribLocation(e, "a_position"), this
					.a_texCoord = t.getAttribLocation(e, "a_texCoord"), this.a_offsets = t
					.getAttribLocation(e, "a_offsets"), this.a_opacity = t.getAttribLocation(e,
					"a_opacity"), this.a_rotateWithView = t.getAttribLocation(e, "a_rotateWithView")
			},
			ec = "webglcontextlost",
			ic = "webglcontextrestored";

		function rc(t, e) {
			Zp.call(this, t, e), this.defaultLocations_ = null, this.styles_ = [], this.styleIndices_ = [],
				this.radius_ = 0, this.state_ = {
					fillColor: null,
					strokeColor: null,
					lineDash: null,
					lineDashOffset: void 0,
					lineWidth: void 0,
					changed: !1
				}
		}

		function oc(t, e, i) {
			var r = t.createTexture();
			return t.bindTexture(t.TEXTURE_2D, r), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MAG_FILTER, t
					.LINEAR), t.texParameteri(t.TEXTURE_2D, t.TEXTURE_MIN_FILTER, t.LINEAR), void 0 !== e &&
				t.texParameteri(Sp, xp, e), void 0 !== i && t.texParameteri(Sp, Ep, i), r
		}

		function nc(t, e, i, r, o) {
			o = oc(t, r, o);
			return t.texImage2D(t.TEXTURE_2D, 0, t.RGBA, e, i, 0, t.RGBA, t.UNSIGNED_BYTE, null), o
		}

		function sc(t, e, i, r) {
			r = oc(t, i, r);
			return t.texImage2D(t.TEXTURE_2D, 0, t.RGBA, t.RGBA, t.UNSIGNED_BYTE, e), r
		}
		var ac, hc, lc, uc = ((lc = T) && (fc.__proto__ = lc), ((fc.prototype = Object.create(lc && lc
					.prototype)).constructor = fc).prototype.bindBuffer = function(t, e) {
					var i, r, o = this.getGL(),
						n = e.getArray(),
						s = ct(e);
					s in this.bufferCache_ ? (r = this.bufferCache_[s], o.bindBuffer(t, r.buffer)) : (r = o
						.createBuffer(), o.bindBuffer(t, r), 34962 == t ? i = new Float32Array(n) :
						34963 == t && (i = new(this.hasOESElementIndexUint ? Uint32Array : Uint16Array)(
							n)), o.bufferData(t, i, e.getUsage()), this.bufferCache_[s] = {
							buf: e,
							buffer: r
						})
				}, fc.prototype.deleteBuffer = function(t) {
					var e = this.getGL(),
						i = ct(t),
						t = this.bufferCache_[i];
					e.isContextLost() || e.deleteBuffer(t.buffer), delete this.bufferCache_[i]
				}, fc.prototype.disposeInternal = function() {
					C(this.canvas_);
					var t = this.getGL();
					if (!t.isContextLost()) {
						for (var e in this.bufferCache_) t.deleteBuffer(this.bufferCache_[e].buffer);
						for (var i in this.programCache_) t.deleteProgram(this.programCache_[i]);
						for (var r in this.shaderCache_) t.deleteShader(this.shaderCache_[r]);
						t.deleteFramebuffer(this.hitDetectionFramebuffer_), t.deleteRenderbuffer(this
							.hitDetectionRenderbuffer_), t.deleteTexture(this.hitDetectionTexture_)
					}
				}, fc.prototype.getCanvas = function() {
					return this.canvas_
				}, fc.prototype.getGL = function() {
					return this.gl_
				}, fc.prototype.getHitDetectionFramebuffer = function() {
					return this.hitDetectionFramebuffer_ || this.initHitDetectionFramebuffer_(), this
						.hitDetectionFramebuffer_
				}, fc.prototype.getShader = function(t) {
					var e = ct(t);
					if (e in this.shaderCache_) return this.shaderCache_[e];
					var i = this.getGL(),
						r = i.createShader(t.getType());
					return i.shaderSource(r, t.getSource()), i.compileShader(r), this.shaderCache_[e] = r
				}, fc.prototype.getProgram = function(t, e) {
					var i = ct(t) + "/" + ct(e);
					if (i in this.programCache_) return this.programCache_[i];
					var r = this.getGL(),
						o = r.createProgram();
					return r.attachShader(o, this.getShader(t)), r.attachShader(o, this.getShader(e)), r
						.linkProgram(o), this.programCache_[i] = o
				}, fc.prototype.handleWebGLContextLost = function() {
					_(this.bufferCache_), _(this.shaderCache_), _(this.programCache_), this
						.currentProgram_ = null, this.hitDetectionFramebuffer_ = null, this
						.hitDetectionTexture_ = null, this.hitDetectionRenderbuffer_ = null
				}, fc.prototype.handleWebGLContextRestored = function() {}, fc.prototype
				.initHitDetectionFramebuffer_ = function() {
					var t = this.gl_,
						e = t.createFramebuffer();
					t.bindFramebuffer(t.FRAMEBUFFER, e);
					var i = nc(t, 1, 1),
						r = t.createRenderbuffer();
					t.bindRenderbuffer(t.RENDERBUFFER, r), t.renderbufferStorage(t.RENDERBUFFER, t
							.DEPTH_COMPONENT16, 1, 1), t.framebufferTexture2D(t.FRAMEBUFFER, t
							.COLOR_ATTACHMENT0, t.TEXTURE_2D, i, 0), t.framebufferRenderbuffer(t
							.FRAMEBUFFER, t.DEPTH_ATTACHMENT, t.RENDERBUFFER, r), t.bindTexture(t
							.TEXTURE_2D, null), t.bindRenderbuffer(t.RENDERBUFFER, null), t.bindFramebuffer(
							t.FRAMEBUFFER, null), this.hitDetectionFramebuffer_ = e, this
						.hitDetectionTexture_ = i, this.hitDetectionRenderbuffer_ = r
				}, fc.prototype.useProgram = function(t) {
					return t != this.currentProgram_ && (this.getGL().useProgram(t), this.currentProgram_ =
						t, !0)
				}, fc),
			pc = ((hc = Yp) && (_c.__proto__ = hc), ((_c.prototype = Object.create(hc && hc.prototype))
				.constructor = _c).prototype.getDeleteResourcesFunction = function(i) {
				var r = this.verticesBuffer,
					o = this.indicesBuffer,
					n = this.getTextures(!0),
					s = i.getGL();
				return function() {
					var t, e;
					if (!s.isContextLost())
						for (t = 0, e = n.length; t < e; ++t) s.deleteTexture(n[t]);
					i.deleteBuffer(r), i.deleteBuffer(o)
				}
			}, _c.prototype.drawCoordinates = function(t, e, i, r) {
				for (var o, n, s, a, h, l = this.anchorX, u = this.anchorY, p = this.height, c = this
						.imageHeight, d = this.imageWidth, _ = this.opacity, f = this.originX, g = this
						.originY, y = this.rotateWithView ? 1 : 0, m = -this.rotation, v = this.scale,
						x = this.width, E = Math.cos(m), S = Math.sin(m), C = this.indices.length, w =
						this.vertices.length, T = e; T < i; T += r) a = t[T] - this.origin[0], h = t[T +
						1] - this.origin[1], o = w / 8, n = -v * l, s = -v * (p - u), this.vertices[
					w++] = a, this.vertices[w++] = h, this.vertices[w++] = n * E - s * S, this.vertices[
						w++] = n * S + s * E, this.vertices[w++] = f / d, this.vertices[w++] = (g + p) /
					c, this.vertices[w++] = _, this.vertices[w++] = y, n = v * (x - l), s = -v * (p -
					u), this.vertices[w++] = a, this.vertices[w++] = h, this.vertices[w++] = n * E - s *
					S, this.vertices[w++] = n * S + s * E, this.vertices[w++] = (f + x) / d, this
					.vertices[w++] = (g + p) / c, this.vertices[w++] = _, this.vertices[w++] = y, n =
					v * (x - l), s = v * u, this.vertices[w++] = a, this.vertices[w++] = h, this
					.vertices[w++] = n * E - s * S, this.vertices[w++] = n * S + s * E, this.vertices[
						w++] = (f + x) / d, this.vertices[w++] = g / c, this.vertices[w++] = _, this
					.vertices[w++] = y, n = -v * l, s = v * u, this.vertices[w++] = a, this.vertices[
						w++] = h, this.vertices[w++] = n * E - s * S, this.vertices[w++] = n * S + s *
					E, this.vertices[w++] = f / d, this.vertices[w++] = g / c, this.vertices[w++] = _,
					this.vertices[w++] = y, this.indices[C++] = o, this.indices[C++] = 1 + o, this
					.indices[C++] = 2 + o, this.indices[C++] = o, this.indices[C++] = 2 + o, this
					.indices[C++] = 3 + o;
				return w
			}, _c.prototype.createTextures = function(t, e, i, r) {
				for (var o, n, s, a = e.length, h = 0; h < a; ++h)(s = ct(n = e[h])) in i ? o = i[s] : (
					o = sc(r, n, 33071, 33071), i[s] = o), t[h] = o
			}, _c.prototype.setUpProgram = function(t, e, i, r) {
				var o, n = e.getProgram(Qp, $p);
				return this.defaultLocations ? o = this.defaultLocations : (o = new tc(t, n), this
						.defaultLocations = o), e.useProgram(n), t.enableVertexAttribArray(o
					.a_position), t.vertexAttribPointer(o.a_position, 2, 5126, !1, 32, 0), t
					.enableVertexAttribArray(o.a_offsets), t.vertexAttribPointer(o.a_offsets, 2, 5126, !
						1, 32, 8), t.enableVertexAttribArray(o.a_texCoord), t.vertexAttribPointer(o
						.a_texCoord, 2, 5126, !1, 32, 16), t.enableVertexAttribArray(o.a_opacity), t
					.vertexAttribPointer(o.a_opacity, 1, 5126, !1, 32, 24), t.enableVertexAttribArray(o
						.a_rotateWithView), t.vertexAttribPointer(o.a_rotateWithView, 1, 5126, !1, 32,
						28), o
			}, _c.prototype.shutDownProgram = function(t, e) {
				t.disableVertexAttribArray(e.a_position), t.disableVertexAttribArray(e.a_offsets), t
					.disableVertexAttribArray(e.a_texCoord), t.disableVertexAttribArray(e.a_opacity), t
					.disableVertexAttribArray(e.a_rotateWithView)
			}, _c.prototype.drawReplay = function(t, e, i, r) {
				var o, n, s, a = r ? this.getHitDetectionTextures() : this.getTextures(),
					h = r ? this.hitDetectionGroupIndices : this.groupIndices;
				if (dt(i))
					for (o = 0, n = a.length, s = 0; o < n; ++o) {
						t.bindTexture(Sp, a[o]);
						var l = h[o];
						this.drawElements(t, e, s, l), s = l
					} else this.drawReplaySkipping(t, e, i, a, h)
			}, _c.prototype.drawReplaySkipping = function(t, e, i, r, o) {
				for (var n = 0, s = 0, a = r.length; s < a; ++s) {
					t.bindTexture(Sp, r[s]);
					for (var h = 0 < s ? o[s - 1] : 0, l = o[s], u = h, p = h; n < this.startIndices
						.length && this.startIndices[n] <= l;) p = void 0 !== i[ct(this
							.startIndicesFeature[n])] ? (u !== p && this.drawElements(t, e, u, p), u =
							n === this.startIndices.length - 1 ? l : this.startIndices[n + 1]) : n ===
						this.startIndices.length - 1 ? l : this.startIndices[n + 1], n++;
					u !== p && this.drawElements(t, e, u, p)
				}
			}, _c.prototype.drawHitDetectionReplayOneByOne = function(t, e, i, r, o) {
				for (var n, s, a, h = this.startIndices.length - 1, l = this.getHitDetectionTextures(),
						u = l.length - 1; 0 <= u; --u)
					for (t.bindTexture(Sp, l[u]), n = 0 < u ? this.hitDetectionGroupIndices[u - 1] : 0,
						a = this.hitDetectionGroupIndices[u]; 0 <= h && this.startIndices[h] >= n;) {
						if (s = this.startIndices[h], void 0 === i[ct(p = this.startIndicesFeature[
							h])] && p.getGeometry() && (void 0 === o || zt(o, p.getGeometry()
							.getExtent()))) {
							t.clear(t.COLOR_BUFFER_BIT | t.DEPTH_BUFFER_BIT), this.drawElements(t, e, s,
								a);
							var p = r(p);
							if (p) return p
						}
						a = s, h--
					}
			}, _c.prototype.finish = function(t) {
				this.anchorX = void 0, this.anchorY = void 0, this.height = void 0, this.imageHeight =
					void 0, this.imageWidth = void 0, this.indices = null, this.opacity = void 0, this
					.originX = void 0, this.originY = void 0, this.rotateWithView = void 0, this
					.rotation = void 0, this.scale = void 0, this.vertices = null, this.width = void 0
			}, _c.prototype.getTextures = function(t) {
				return a()
			}, _c.prototype.getHitDetectionTextures = function() {
				return a()
			}, _c),
			cc = ((ac = pc) && (dc.__proto__ = ac), ((dc.prototype = Object.create(ac && ac.prototype))
				.constructor = dc).prototype.drawMultiPoint = function(t, e) {
				this.startIndices.push(this.indices.length), this.startIndicesFeature.push(e);
				e = t.getFlatCoordinates(), t = t.getStride();
				this.drawCoordinates(e, 0, e.length, t)
			}, dc.prototype.drawPoint = function(t, e) {
				this.startIndices.push(this.indices.length), this.startIndicesFeature.push(e);
				e = t.getFlatCoordinates(), t = t.getStride();
				this.drawCoordinates(e, 0, e.length, t)
			}, dc.prototype.finish = function(t) {
				var e = t.getGL();
				this.groupIndices.push(this.indices.length), this.hitDetectionGroupIndices.push(this
					.indices.length), this.verticesBuffer = new qp(this.vertices);
				var i = this.indices;
				this.indicesBuffer = new qp(i);
				i = {};
				this.createTextures(this.textures_, this.images_, i, e), this.createTextures(this
						.hitDetectionTextures_, this.hitDetectionImages_, i, e), this.images_ = null,
					this.hitDetectionImages_ = null, ac.prototype.finish.call(this, t)
			}, dc.prototype.setImageStyle = function(t) {
				var e = t.getAnchor(),
					i = t.getImage(1),
					r = t.getImageSize(),
					o = t.getHitDetectionImage(1),
					n = t.getOpacity(),
					s = t.getOrigin(),
					a = t.getRotateWithView(),
					h = t.getRotation(),
					l = t.getSize(),
					t = t.getScale();
				0 === this.images_.length ? this.images_.push(i) : ct(this.images_[this.images_.length -
						1]) != ct(i) && (this.groupIndices.push(this.indices.length), this.images_.push(
						i)), 0 === this.hitDetectionImages_.length ? this.hitDetectionImages_.push(o) :
					ct(this.hitDetectionImages_[this.hitDetectionImages_.length - 1]) != ct(o) && (this
						.hitDetectionGroupIndices.push(this.indices.length), this.hitDetectionImages_
						.push(o)), this.anchorX = e[0], this.anchorY = e[1], this.height = l[1], this
					.imageHeight = r[1], this.imageWidth = r[0], this.opacity = n, this.originX = s[0],
					this.originY = s[1], this.rotation = h, this.rotateWithView = a, this.scale = t,
					this.width = l[0]
			}, dc.prototype.getTextures = function(t) {
				return t ? this.textures_.concat(this.hitDetectionTextures_) : this.textures_
			}, dc.prototype.getHitDetectionTextures = function() {
				return this.hitDetectionTextures_
			}, dc);

		function dc(t, e) {
			ac.call(this, t, e), this.images_ = [], this.hitDetectionImages_ = [], this.textures_ = [], this
				.hitDetectionTextures_ = []
		}

		function _c(t, e) {
			hc.call(this, t, e), this.anchorX = void 0, this.anchorY = void 0, this.groupIndices = [], this
				.hitDetectionGroupIndices = [], this.height = void 0, this.imageHeight = void 0, this
				.imageWidth = void 0, this.defaultLocations = null, this.opacity = void 0, this.originX =
				void 0, this.originY = void 0, this.rotateWithView = void 0, this.rotation = void 0, this
				.scale = void 0, this.width = void 0
		}

		function fc(t, e) {
			lc.call(this), this.canvas_ = t, this.gl_ = e, this.bufferCache_ = {}, this.shaderCache_ = {},
				this.programCache_ = {}, this.currentProgram_ = null, this.hitDetectionFramebuffer_ = null,
				this.hitDetectionTexture_ = null, this.hitDetectionRenderbuffer_ = null, this
				.hasOESElementIndexUint = ot(ip, "OES_element_index_uint"), this.hasOESElementIndexUint && e
				.getExtension("OES_element_index_uint"), E(this.canvas_, ec, this.handleWebGLContextLost,
					this), E(this.canvas_, ic, this.handleWebGLContextRestored, this)
		}

		function gc(t, e, i, r) {
			var o = i - r;
			return t[e] === t[o] && t[e + 1] === t[1 + o] && 3 < (i - e) / r && !!_i(t, e, i, r)
		}
		var yc, mc = new Fp(
				"precision mediump float;\nvarying float v_round;\nvarying vec2 v_roundVertex;\nvarying float v_halfWidth;\n\n\n\nuniform float u_opacity;\nuniform vec4 u_color;\nuniform vec2 u_size;\nuniform float u_pixelRatio;\n\nvoid main(void) {\n  if (v_round > 0.0) {\n    vec2 windowCoords = vec2((v_roundVertex.x + 1.0) / 2.0 * u_size.x * u_pixelRatio,\n        (v_roundVertex.y + 1.0) / 2.0 * u_size.y * u_pixelRatio);\n    if (length(windowCoords - gl_FragCoord.xy) > v_halfWidth * u_pixelRatio) {\n      discard;\n    }\n  }\n  gl_FragColor = u_color;\n  float alpha = u_color.a * u_opacity;\n  if (alpha == 0.0) {\n    discard;\n  }\n  gl_FragColor.a = alpha;\n}\n"
				),
			vc = new Op(
				"varying float v_round;\nvarying vec2 v_roundVertex;\nvarying float v_halfWidth;\n\n\nattribute vec2 a_lastPos;\nattribute vec2 a_position;\nattribute vec2 a_nextPos;\nattribute float a_direction;\n\nuniform mat4 u_projectionMatrix;\nuniform mat4 u_offsetScaleMatrix;\nuniform mat4 u_offsetRotateMatrix;\nuniform float u_lineWidth;\nuniform float u_miterLimit;\n\nbool nearlyEquals(in float value, in float ref) {\n  float epsilon = 0.000000000001;\n  return value >= ref - epsilon && value <= ref + epsilon;\n}\n\nvoid alongNormal(out vec2 offset, in vec2 nextP, in float turnDir, in float direction) {\n  vec2 dirVect = nextP - a_position;\n  vec2 normal = normalize(vec2(-turnDir * dirVect.y, turnDir * dirVect.x));\n  offset = u_lineWidth / 2.0 * normal * direction;\n}\n\nvoid miterUp(out vec2 offset, out float round, in bool isRound, in float direction) {\n  float halfWidth = u_lineWidth / 2.0;\n  vec2 tangent = normalize(normalize(a_nextPos - a_position) + normalize(a_position - a_lastPos));\n  vec2 normal = vec2(-tangent.y, tangent.x);\n  vec2 dirVect = a_nextPos - a_position;\n  vec2 tmpNormal = normalize(vec2(-dirVect.y, dirVect.x));\n  float miterLength = abs(halfWidth / dot(normal, tmpNormal));\n  offset = normal * direction * miterLength;\n  round = 0.0;\n  if (isRound) {\n    round = 1.0;\n  } else if (miterLength > u_miterLimit + u_lineWidth) {\n    offset = halfWidth * tmpNormal * direction;\n  }\n}\n\nbool miterDown(out vec2 offset, in vec4 projPos, in mat4 offsetMatrix, in float direction) {\n  bool degenerate = false;\n  vec2 tangent = normalize(normalize(a_nextPos - a_position) + normalize(a_position - a_lastPos));\n  vec2 normal = vec2(-tangent.y, tangent.x);\n  vec2 dirVect = a_lastPos - a_position;\n  vec2 tmpNormal = normalize(vec2(-dirVect.y, dirVect.x));\n  vec2 longOffset, shortOffset, longVertex;\n  vec4 shortProjVertex;\n  float halfWidth = u_lineWidth / 2.0;\n  if (length(a_nextPos - a_position) > length(a_lastPos - a_position)) {\n    longOffset = tmpNormal * direction * halfWidth;\n    shortOffset = normalize(vec2(dirVect.y, -dirVect.x)) * direction * halfWidth;\n    longVertex = a_nextPos;\n    shortProjVertex = u_projectionMatrix * vec4(a_lastPos, 0.0, 1.0);\n  } else {\n    shortOffset = tmpNormal * direction * halfWidth;\n    longOffset = normalize(vec2(dirVect.y, -dirVect.x)) * direction * halfWidth;\n    longVertex = a_lastPos;\n    shortProjVertex = u_projectionMatrix * vec4(a_nextPos, 0.0, 1.0);\n  }\n  //Intersection algorithm based on theory by Paul Bourke (http://paulbourke.net/geometry/pointlineplane/).\n  vec4 p1 = u_projectionMatrix * vec4(longVertex, 0.0, 1.0) + offsetMatrix * vec4(longOffset, 0.0, 0.0);\n  vec4 p2 = projPos + offsetMatrix * vec4(longOffset, 0.0, 0.0);\n  vec4 p3 = shortProjVertex + offsetMatrix * vec4(-shortOffset, 0.0, 0.0);\n  vec4 p4 = shortProjVertex + offsetMatrix * vec4(shortOffset, 0.0, 0.0);\n  float denom = (p4.y - p3.y) * (p2.x - p1.x) - (p4.x - p3.x) * (p2.y - p1.y);\n  float firstU = ((p4.x - p3.x) * (p1.y - p3.y) - (p4.y - p3.y) * (p1.x - p3.x)) / denom;\n  float secondU = ((p2.x - p1.x) * (p1.y - p3.y) - (p2.y - p1.y) * (p1.x - p3.x)) / denom;\n  float epsilon = 0.000000000001;\n  if (firstU > epsilon && firstU < 1.0 - epsilon && secondU > epsilon && secondU < 1.0 - epsilon) {\n    shortProjVertex.x = p1.x + firstU * (p2.x - p1.x);\n    shortProjVertex.y = p1.y + firstU * (p2.y - p1.y);\n    offset = shortProjVertex.xy;\n    degenerate = true;\n  } else {\n    float miterLength = abs(halfWidth / dot(normal, tmpNormal));\n    offset = normal * direction * miterLength;\n  }\n  return degenerate;\n}\n\nvoid squareCap(out vec2 offset, out float round, in bool isRound, in vec2 nextP,\n    in float turnDir, in float direction) {\n  round = 0.0;\n  vec2 dirVect = a_position - nextP;\n  vec2 firstNormal = normalize(dirVect);\n  vec2 secondNormal = vec2(turnDir * firstNormal.y * direction, -turnDir * firstNormal.x * direction);\n  vec2 hypotenuse = normalize(firstNormal - secondNormal);\n  vec2 normal = vec2(turnDir * hypotenuse.y * direction, -turnDir * hypotenuse.x * direction);\n  float length = sqrt(v_halfWidth * v_halfWidth * 2.0);\n  offset = normal * length;\n  if (isRound) {\n    round = 1.0;\n  }\n}\n\nvoid main(void) {\n  bool degenerate = false;\n  float direction = float(sign(a_direction));\n  mat4 offsetMatrix = u_offsetScaleMatrix * u_offsetRotateMatrix;\n  vec2 offset;\n  vec4 projPos = u_projectionMatrix * vec4(a_position, 0.0, 1.0);\n  bool round = nearlyEquals(mod(a_direction, 2.0), 0.0);\n\n  v_round = 0.0;\n  v_halfWidth = u_lineWidth / 2.0;\n  v_roundVertex = projPos.xy;\n\n  if (nearlyEquals(mod(a_direction, 3.0), 0.0) || nearlyEquals(mod(a_direction, 17.0), 0.0)) {\n    alongNormal(offset, a_nextPos, 1.0, direction);\n  } else if (nearlyEquals(mod(a_direction, 5.0), 0.0) || nearlyEquals(mod(a_direction, 13.0), 0.0)) {\n    alongNormal(offset, a_lastPos, -1.0, direction);\n  } else if (nearlyEquals(mod(a_direction, 23.0), 0.0)) {\n    miterUp(offset, v_round, round, direction);\n  } else if (nearlyEquals(mod(a_direction, 19.0), 0.0)) {\n    degenerate = miterDown(offset, projPos, offsetMatrix, direction);\n  } else if (nearlyEquals(mod(a_direction, 7.0), 0.0)) {\n    squareCap(offset, v_round, round, a_nextPos, 1.0, direction);\n  } else if (nearlyEquals(mod(a_direction, 11.0), 0.0)) {\n    squareCap(offset, v_round, round, a_lastPos, -1.0, direction);\n  }\n  if (!degenerate) {\n    vec4 offsets = offsetMatrix * vec4(offset, 0.0, 0.0);\n    gl_Position = projPos + offsets;\n  } else {\n    gl_Position = vec4(offset, 0.0, 1.0);\n  }\n}\n\n\n"
				),
			xc = function(t, e) {
				this.u_projectionMatrix = t.getUniformLocation(e, "u_projectionMatrix"), this
					.u_offsetScaleMatrix = t.getUniformLocation(e, "u_offsetScaleMatrix"), this
					.u_offsetRotateMatrix = t.getUniformLocation(e, "u_offsetRotateMatrix"), this
					.u_lineWidth = t.getUniformLocation(e, "u_lineWidth"), this.u_miterLimit = t
					.getUniformLocation(e, "u_miterLimit"), this.u_opacity = t.getUniformLocation(e,
						"u_opacity"), this.u_color = t.getUniformLocation(e, "u_color"), this.u_size = t
					.getUniformLocation(e, "u_size"), this.u_pixelRatio = t.getUniformLocation(e,
						"u_pixelRatio"), this.a_lastPos = t.getAttribLocation(e, "a_lastPos"), this
					.a_position = t.getAttribLocation(e, "a_position"), this.a_nextPos = t
					.getAttribLocation(e, "a_nextPos"), this.a_direction = t.getAttribLocation(e,
						"a_direction")
			},
			Ec = ((yc = Yp) && (Rc.__proto__ = yc), ((Rc.prototype = Object.create(yc && yc.prototype))
				.constructor = Rc).prototype.drawCoordinates_ = function(t, e, i, r) {
				for (var o, n, s, a, h, l, u = this.vertices.length, p = this.indices.length, c =
						"bevel" === this.state_.lineJoin ? 0 : "miter" === this.state_.lineJoin ? 1 : 2,
						d = "butt" === this.state_.lineCap ? 0 : "square" === this.state_.lineCap ? 1 :
						2, _ = gc(t, e, i, r), f = p, g = 1, y = e, m = i; y < m; y += r) {
					if (s = u / 7, a = h, h = l || [t[y], t[y + 1]], y === e) {
						if (l = [t[y + r], t[y + r + 1]], i - e == 2 * r && _t(h, l)) break;
						if (!_) {
							d && (u = this.addVertices_([0, 0], h, l, 7 * g * d, u), u = this
								.addVertices_([0, 0], h, l, 7 * -g * d, u), this.indices[p++] = s +
								2, this.indices[p++] = s, this.indices[p++] = s + 1, this.indices[
									p++] = s + 1, this.indices[p++] = s + 3, this.indices[p++] = s +
								2), u = this.addVertices_([0, 0], h, l, 3 * g * (d || 1), u), f = (
								u = this.addVertices_([0, 0], h, l, 3 * -g * (d || 1), u)) / 7 - 1;
							continue
						}
						a = [t[i - 2 * r], t[i - 2 * r + 1]], o = l
					} else {
						if (y === i - r) {
							if (_) {
								l = o;
								break
							}
							a = a || [0, 0], u = this.addVertices_(a, h, [0, 0], 5 * g * (d || 1), u),
								u = this.addVertices_(a, h, [0, 0], 5 * -g * (d || 1), u), this.indices[
									p++] = s, this.indices[p++] = f - 1, this.indices[p++] = f, this
								.indices[p++] = f, this.indices[p++] = s + 1, this.indices[p++] = s,
								d && (u = this.addVertices_(a, h, [0, 0], 11 * g * d, u), u = this
									.addVertices_(a, h, [0, 0], 11 * -g * d, u), this.indices[p++] = s +
									2, this.indices[p++] = s, this.indices[p++] = s + 1, this.indices[
										p++] = s + 1, this.indices[p++] = s + 3, this.indices[p++] = s +
									2);
							break
						}
						l = [t[y + r], t[y + r + 1]]
					}
					n = Wp(a[0], a[1], h[0], h[1], l[0], l[1]) ? -1 : 1, u = this.addVertices_(a, h, l,
							13 * n * (c || 1), u), u = this.addVertices_(a, h, l, 17 * n * (c || 1), u),
						u = this.addVertices_(a, h, l, 19 * -n * (c || 1), u), e < y && (this.indices[
								p++] = s, this.indices[p++] = f - 1, this.indices[p++] = f, this
							.indices[p++] = s + 2, this.indices[p++] = s, this.indices[p++] = 0 < g *
							n ? f : f - 1), this.indices[p++] = s, this.indices[p++] = s + 2, this
						.indices[p++] = s + 1, f = s + 2, g = n, c && (u = this.addVertices_(a, h, l,
								23 * n * c, u), this.indices[p++] = s + 1, this.indices[p++] = s + 3,
							this.indices[p++] = s)
				}
				_ && (s = s || u / 7, n = zi([a[0], a[1], h[0], h[1], l[0], l[1]], 0, 6, 2) ? 1 : -1,
					u = this.addVertices_(a, h, l, 13 * n * (c || 1), u), u = this.addVertices_(a,
						h, l, 19 * -n * (c || 1), u), this.indices[p++] = s, this.indices[p++] = f -
					1, this.indices[p++] = f, this.indices[p++] = s + 1, this.indices[p++] = s, this
					.indices[p++] = 0 < g * n ? f : f - 1)
			}, Rc.prototype.addVertices_ = function(t, e, i, r, o) {
				return this.vertices[o++] = t[0], this.vertices[o++] = t[1], this.vertices[o++] = e[0],
					this.vertices[o++] = e[1], this.vertices[o++] = i[0], this.vertices[o++] = i[1],
					this.vertices[o++] = r, o
			}, Rc.prototype.isValid_ = function(t, e, i, r) {
				i -= e;
				return !(i < 2 * r || i == 2 * r && _t([t[e], t[e + 1]], [t[e + r], t[e + r + 1]]))
			}, Rc.prototype.drawLineString = function(t, e) {
				var i = t.getFlatCoordinates(),
					t = t.getStride();
				this.isValid_(i, 0, i.length, t) && (i = qt(i, 0, i.length, t, -this.origin[0], -this
					.origin[1]), this.state_.changed && (this.styleIndices_.push(this.indices
					.length), this.state_.changed = !1), this.startIndices.push(this.indices
					.length), this.startIndicesFeature.push(e), this.drawCoordinates_(i, 0, i
					.length, t))
			}, Rc.prototype.drawMultiLineString = function(t, e) {
				var i = this.indices.length,
					r = t.getEnds();
				r.unshift(0);
				var o, n, s, a = t.getFlatCoordinates(),
					h = t.getStride();
				if (1 < r.length)
					for (o = 1, n = r.length; o < n; ++o) this.isValid_(a, r[o - 1], r[o], h) && (s =
						qt(a, r[o - 1], r[o], h, -this.origin[0], -this.origin[1]), this
						.drawCoordinates_(s, 0, s.length, h));
				this.indices.length > i && (this.startIndices.push(i), this.startIndicesFeature.push(e),
					this.state_.changed && (this.styleIndices_.push(i), this.state_.changed = !1))
			}, Rc.prototype.drawPolygonCoordinates = function(t, e, i) {
				var r, o;
				if (gc(t, 0, t.length, i) || (t.push(t[0]), t.push(t[1])), this.drawCoordinates_(t, 0, t
						.length, i), e.length)
					for (r = 0, o = e.length; r < o; ++r) gc(e[r], 0, e[r].length, i) || (e[r].push(e[r]
						[0]), e[r].push(e[r][1])), this.drawCoordinates_(e[r], 0, e[r].length, i)
			}, Rc.prototype.setPolygonStyle = function(t, e) {
				e = void 0 === e ? this.indices.length : e;
				this.startIndices.push(e), this.startIndicesFeature.push(t), this.state_.changed && (
					this.styleIndices_.push(e), this.state_.changed = !1)
			}, Rc.prototype.getCurrentIndex = function() {
				return this.indices.length
			}, Rc.prototype.finish = function(t) {
				this.verticesBuffer = new qp(this.vertices), this.indicesBuffer = new qp(this.indices),
					this.startIndices.push(this.indices.length), 0 === this.styleIndices_.length && 0 <
					this.styles_.length && (this.styles_ = []), this.vertices = null, this.indices =
					null
			}, Rc.prototype.getDeleteResourcesFunction = function(t) {
				var e = this.verticesBuffer,
					i = this.indicesBuffer;
				return function() {
					t.deleteBuffer(e), t.deleteBuffer(i)
				}
			}, Rc.prototype.setUpProgram = function(t, e, i, r) {
				var o, n = e.getProgram(mc, vc);
				return this.defaultLocations_ ? o = this.defaultLocations_ : (o = new xc(t, n), this
						.defaultLocations_ = o), e.useProgram(n), t.enableVertexAttribArray(o
					.a_lastPos), t.vertexAttribPointer(o.a_lastPos, 2, 5126, !1, 28, 0), t
					.enableVertexAttribArray(o.a_position), t.vertexAttribPointer(o.a_position, 2, 5126,
						!1, 28, 8), t.enableVertexAttribArray(o.a_nextPos), t.vertexAttribPointer(o
						.a_nextPos, 2, 5126, !1, 28, 16), t.enableVertexAttribArray(o.a_direction), t
					.vertexAttribPointer(o.a_direction, 1, 5126, !1, 28, 24), t.uniform2fv(o.u_size, i),
					t.uniform1f(o.u_pixelRatio, r), o
			}, Rc.prototype.shutDownProgram = function(t, e) {
				t.disableVertexAttribArray(e.a_lastPos), t.disableVertexAttribArray(e.a_position), t
					.disableVertexAttribArray(e.a_nextPos), t.disableVertexAttribArray(e.a_direction)
			}, Rc.prototype.drawReplay = function(t, e, i, r) {
				var o, n, s, a, h = t.getParameter(t.DEPTH_FUNC),
					l = t.getParameter(t.DEPTH_WRITEMASK);
				if (r || (t.enable(t.DEPTH_TEST), t.depthMask(!0), t.depthFunc(t.NOTEQUAL)), dt(i))
					for (s = this.startIndices[this.startIndices.length - 1], o = this.styleIndices_
						.length - 1; 0 <= o; --o) n = this.styleIndices_[o], a = this.styles_[o], this
						.setStrokeStyle_(t, a[0], a[1], a[2]), this.drawElements(t, e, n, s), t.clear(t
							.DEPTH_BUFFER_BIT), s = n;
				else this.drawReplaySkipping_(t, e, i);
				r || (t.disable(t.DEPTH_TEST), t.clear(t.DEPTH_BUFFER_BIT), t.depthMask(l), t.depthFunc(
					h))
			}, Rc.prototype.drawReplaySkipping_ = function(t, e, i) {
				for (var r, o, n, s, a = this.startIndices.length - 2, h = r = this.startIndices[a + 1],
						l = this.styleIndices_.length - 1; 0 <= l; --l) {
					for (o = this.styles_[l], this.setStrokeStyle_(t, o[0], o[1], o[2]), n = this
						.styleIndices_[l]; 0 <= a && this.startIndices[a] >= n;) s = this.startIndices[
						a], i[ct(this.startIndicesFeature[a])] && (r !== h && (this.drawElements(t,
						e, r, h), t.clear(t.DEPTH_BUFFER_BIT)), h = s), a--, r = s;
					r !== h && (this.drawElements(t, e, r, h), t.clear(t.DEPTH_BUFFER_BIT)), r = h = n
				}
			}, Rc.prototype.drawHitDetectionReplayOneByOne = function(t, e, i, r, o) {
				for (var n, s, a, h = this.startIndices.length - 2, l = this.startIndices[h + 1], u =
						this.styleIndices_.length - 1; 0 <= u; --u)
					for (s = this.styles_[u], this.setStrokeStyle_(t, s[0], s[1], s[2]), a = this
						.styleIndices_[u]; 0 <= h && this.startIndices[h] >= a;) {
						if (n = this.startIndices[h], void 0 === i[ct(p = this.startIndicesFeature[
							h])] && p.getGeometry() && (void 0 === o || zt(o, p.getGeometry()
							.getExtent()))) {
							t.clear(t.COLOR_BUFFER_BIT | t.DEPTH_BUFFER_BIT), this.drawElements(t, e, n,
								l);
							var p = r(p);
							if (p) return p
						}
						h--, l = n
					}
			}, Rc.prototype.setStrokeStyle_ = function(t, e, i, r) {
				t.uniform4fv(this.defaultLocations_.u_color, e), t.uniform1f(this.defaultLocations_
					.u_lineWidth, i), t.uniform1f(this.defaultLocations_.u_miterLimit, r)
			}, Rc.prototype.setFillStrokeStyle = function(t, e) {
				var i = e.getLineCap();
				this.state_.lineCap = void 0 !== i ? i : "round";
				var r = e.getLineDash();
				this.state_.lineDash = r || zp;
				i = e.getLineDashOffset();
				this.state_.lineDashOffset = i || 0;
				r = e.getLineJoin();
				this.state_.lineJoin = void 0 !== r ? r : "round";
				i = !((i = e.getColor()) instanceof CanvasGradient || i instanceof CanvasPattern) && oo(
					i).map(function(t, e) {
					return 3 != e ? t / 255 : t
				}) || Xp, r = void 0 !== (r = e.getWidth()) ? r : 1, e = void 0 !== (e = e
					.getMiterLimit()) ? e : 10;
				this.state_.strokeColor && _t(this.state_.strokeColor, i) && this.state_.lineWidth ===
					r && this.state_.miterLimit === e || (this.state_.changed = !0, this.state_
						.strokeColor = i, this.state_.lineWidth = r, this.state_.miterLimit = e, this
						.styles_.push([i, r, e]))
			}, Rc),
			Sc = new Fp(
				"precision mediump float;\n\n\n\nuniform vec4 u_color;\nuniform float u_opacity;\n\nvoid main(void) {\n  gl_FragColor = u_color;\n  float alpha = u_color.a * u_opacity;\n  if (alpha == 0.0) {\n    discard;\n  }\n  gl_FragColor.a = alpha;\n}\n"
				),
			Cc = new Op(
				"\n\nattribute vec2 a_position;\n\nuniform mat4 u_projectionMatrix;\nuniform mat4 u_offsetScaleMatrix;\nuniform mat4 u_offsetRotateMatrix;\n\nvoid main(void) {\n  gl_Position = u_projectionMatrix * vec4(a_position, 0.0, 1.0);\n}\n\n\n"
				),
			wc = function(t, e) {
				this.u_projectionMatrix = t.getUniformLocation(e, "u_projectionMatrix"), this
					.u_offsetScaleMatrix = t.getUniformLocation(e, "u_offsetScaleMatrix"), this
					.u_offsetRotateMatrix = t.getUniformLocation(e, "u_offsetRotateMatrix"), this.u_color =
					t.getUniformLocation(e, "u_color"), this.u_opacity = t.getUniformLocation(e,
						"u_opacity"), this.a_position = t.getAttribLocation(e, "a_position")
			},
			Tc = function(t) {
				this.first_, this.last_, this.head_, this.circular_ = void 0 === t || t, this.length_ = 0
			};

		function Rc(t, e) {
			yc.call(this, t, e), this.defaultLocations_ = null, this.styles_ = [], this.styleIndices_ = [],
				this.state_ = {
					strokeColor: null,
					lineCap: void 0,
					lineDash: null,
					lineDashOffset: void 0,
					lineJoin: void 0,
					lineWidth: void 0,
					miterLimit: void 0,
					changed: !1
				}
		}
		Tc.prototype.insertItem = function(t) {
			var e = {
					prev: void 0,
					next: void 0,
					data: t
				},
				i = this.head_;
			i ? (t = i.next, e.prev = i, e.next = t, i.next = e, t && (t.prev = e), i === this.last_ &&
				(this.last_ = e)) : (this.first_ = e, this.last_ = e, this.circular_ && ((e.next =
				e).prev = e)), this.head_ = e, this.length_++
		}, Tc.prototype.removeItem = function() {
			var t, e, i = this.head_;
			i && (t = i.next, e = i.prev, t && (t.prev = e), e && (e.next = t), this.head_ = t || e,
				this.first_ === this.last_ ? (this.head_ = void 0, this.first_ = void 0, this
					.last_ = void 0) : this.first_ === i ? this.first_ = this.head_ : this.last_ ===
				i && (this.last_ = e ? this.head_.prev : this.head_), this.length_--)
		}, Tc.prototype.firstItem = function() {
			if (this.head_ = this.first_, this.head_) return this.head_.data
		}, Tc.prototype.lastItem = function() {
			if (this.head_ = this.last_, this.head_) return this.head_.data
		}, Tc.prototype.nextItem = function() {
			if (this.head_ && this.head_.next) return this.head_ = this.head_.next, this.head_.data
		}, Tc.prototype.getNextItem = function() {
			if (this.head_ && this.head_.next) return this.head_.next.data
		}, Tc.prototype.prevItem = function() {
			if (this.head_ && this.head_.prev) return this.head_ = this.head_.prev, this.head_.data
		}, Tc.prototype.getPrevItem = function() {
			if (this.head_ && this.head_.prev) return this.head_.prev.data
		}, Tc.prototype.getCurrItem = function() {
			if (this.head_) return this.head_.data
		}, Tc.prototype.setFirstItem = function() {
			this.circular_ && this.head_ && (this.first_ = this.head_, this.last_ = this.head_.prev)
		}, Tc.prototype.concat = function(t) {
			var e;
			t.head_ && (this.head_ ? (e = this.head_.next, this.head_.next = t.first_, t.first_.prev =
					this.head_, e.prev = t.last_, t.last_.next = e, this.length_ += t.length_) : (
					this.head_ = t.head_, this.first_ = t.first_, this.last_ = t.last_, this
					.length_ = t.length_), t.head_ = void 0, t.first_ = void 0, t.last_ = void 0, t
				.length_ = 0)
		}, Tc.prototype.getLength = function() {
			return this.length_
		};
		var Ic = Tc,
			Lc = function(t) {
				this.rbush_ = eu()(t, void 0), this.items_ = {}
			};
		Lc.prototype.insert = function(t, e) {
			t = {
				minX: t[0],
				minY: t[1],
				maxX: t[2],
				maxY: t[3],
				value: e
			};
			this.rbush_.insert(t), this.items_[ct(e)] = t
		}, Lc.prototype.load = function(t, e) {
			for (var i = new Array(e.length), r = 0, o = e.length; r < o; r++) {
				var n = t[r],
					s = e[r],
					n = {
						minX: n[0],
						minY: n[1],
						maxX: n[2],
						maxY: n[3],
						value: s
					};
				i[r] = n, this.items_[ct(s)] = n
			}
			this.rbush_.load(i)
		}, Lc.prototype.remove = function(t) {
			var e = ct(t),
				t = this.items_[e];
			return delete this.items_[e], null !== this.rbush_.remove(t)
		}, Lc.prototype.update = function(t, e) {
			var i = this.items_[ct(e)];
			Lt([i.minX, i.minY, i.maxX, i.maxY], t) || (this.remove(e), this.insert(t, e))
		}, Lc.prototype.getAll = function() {
			return this.rbush_.all().map(function(t) {
				return t.value
			})
		}, Lc.prototype.getInExtent = function(t) {
			t = {
				minX: t[0],
				minY: t[1],
				maxX: t[2],
				maxY: t[3]
			};
			return this.rbush_.search(t).map(function(t) {
				return t.value
			})
		}, Lc.prototype.forEach = function(t, e) {
			return this.forEach_(this.getAll(), t, e)
		}, Lc.prototype.forEachInExtent = function(t, e, i) {
			return this.forEach_(this.getInExtent(t), e, i)
		}, Lc.prototype.forEach_ = function(t, e, i) {
			for (var r, o = 0, n = t.length; o < n; o++)
				if (r = e.call(i, t[o])) return r;
			return r
		}, Lc.prototype.isEmpty = function() {
			return dt(this.items_)
		}, Lc.prototype.clear = function() {
			this.rbush_.clear(), this.items_ = {}
		}, Lc.prototype.getExtent = function(t) {
			var e = this.rbush_.toJSON();
			return wt(e.minX, e.minY, e.maxX, e.maxY, t)
		}, Lc.prototype.concat = function(t) {
			for (var e in this.rbush_.load(t.rbush_.all()), t.items_) this.items_[e] = t.items_[e]
		};
		var bc, Pc = Lc,
			Mc = ((bc = Yp) && (Oc.__proto__ = bc), ((Oc.prototype = Object.create(bc && bc.prototype))
				.constructor = Oc).prototype.drawCoordinates_ = function(t, e, i) {
				var r = new Ic,
					o = new Pc;
				this.processFlatCoordinates_(t, i, r, o, !0);
				var n = this.getMaxCoords_(r);
				if (e.length) {
					for (var s = [], a = 0, h = e.length; a < h; ++a) {
						var l = {
							list: new Ic,
							maxCoords: void 0,
							rtree: new Pc
						};
						s.push(l), this.processFlatCoordinates_(e[a], i, l.list, l.rtree, !1), this
							.classifyPoints_(l.list, l.rtree, !0), l.maxCoords = this.getMaxCoords_(l
								.list)
					}
					for (s.sort(function(t, e) {
							return e.maxCoords[0] === t.maxCoords[0] ? t.maxCoords[1] - e.maxCoords[
								1] : e.maxCoords[0] - t.maxCoords[0]
						}), a = 0; a < s.length; ++a) {
						var u = s[a].list,
							p = u.firstItem(),
							c = p,
							d = void 0;
						do {
							if (this.getIntersections_(c, o).length) {
								d = !0;
								break
							}
						} while (p !== (c = u.nextItem()));
						d || this.bridgeHole_(u, s[a].maxCoords[0], r, n[0], o) && (o.concat(s[a]
							.rtree), this.classifyPoints_(r, o, !1))
					}
				} else this.classifyPoints_(r, o, !1);
				this.triangulate_(r, o)
			}, Oc.prototype.processFlatCoordinates_ = function(t, e, i, r, o) {
				var n, s, a = zi(t, 0, t.length, e),
					h = this.vertices.length / 2,
					l = [],
					u = [];
				if (o === a) {
					for (p = n = this.createPoint_(t[0], t[1], h++), c = e, d = t.length; c < d; c += e)
						s = this.createPoint_(t[c], t[c + 1], h++), u.push(this.insertItem_(p, s, i)), l
						.push([Math.min(p.x, s.x), Math.min(p.y, s.y), Math.max(p.x, s.x), Math.max(p.y,
							s.y)]), p = s;
					u.push(this.insertItem_(s, n, i)), l.push([Math.min(p.x, s.x), Math.min(p.y, s.y),
						Math.max(p.x, s.x), Math.max(p.y, s.y)
					])
				} else {
					for (var a = t.length - e, p = n = this.createPoint_(t[a], t[1 + a], h++), c = a -
							e, d = 0; d <= c; c -= e) s = this.createPoint_(t[c], t[c + 1], h++), u
						.push(this.insertItem_(p, s, i)), l.push([Math.min(p.x, s.x), Math.min(p.y, s
							.y), Math.max(p.x, s.x), Math.max(p.y, s.y)
						]), p = s;
					u.push(this.insertItem_(s, n, i)), l.push([Math.min(p.x, s.x), Math.min(p.y, s.y),
						Math.max(p.x, s.x), Math.max(p.y, s.y)
					])
				}
				r.load(l, u)
			}, Oc.prototype.getMaxCoords_ = function(t) {
				for (var e = t.firstItem(), i = e, r = [i.p0.x, i.p0.y];
					(i = t.nextItem()).p0.x > r[0] && (r = [i.p0.x, i.p0.y]), i !== e;);
				return r
			}, Oc.prototype.classifyPoints_ = function(t, e, i) {
				var r = t.firstItem(),
					o = r,
					n = t.nextItem(),
					s = !1;
				do {
					var a = i ? Wp(n.p1.x, n.p1.y, o.p1.x, o.p1.y, o.p0.x, o.p0.y) : Wp(o.p0.x, o.p0.y,
						o.p1.x, o.p1.y, n.p1.x, n.p1.y)
				} while (void 0 === a ? (this.removeItem_(o, n, t, e), s = !0, n === r && (r = t
						.getNextItem()), n = o, t.prevItem()) : o.p1.reflex !== a && (o.p1.reflex = a,
						s = !0), o = n, n = t.nextItem(), o !== r);
				return s
			}, Oc.prototype.bridgeHole_ = function(t, e, i, r, o) {
				for (var n = t.firstItem(); n.p1.x !== e;) n = t.nextItem();
				var s, a, h = n.p1,
					l = {
						x: r,
						y: h.y,
						i: -1
					},
					u = 1 / 0,
					p = this.getIntersections_({
						p0: h,
						p1: l
					}, o, !0);
				for (y = 0, m = p.length; y < m; ++y) {
					var c = p[y],
						d = this.calculateIntersection_(h, l, c.p0, c.p1, !0),
						_ = Math.abs(h.x - d[0]);
					_ < u && void 0 !== Wp(h.x, h.y, c.p0.x, c.p0.y, c.p1.x, c.p1.y) && (u = _, a = {
						x: d[0],
						y: d[1],
						i: -1
					}, n = c)
				}
				if (u === 1 / 0) return !1;
				if (s = n.p1, 0 < u) {
					var f = this.getPointsInTriangle_(h, a, n.p1, o);
					if (f.length)
						for (var g = 1 / 0, y = 0, m = f.length; y < m; ++y) {
							var v = f[y],
								x = Math.atan2(h.y - v.y, l.x - v.x);
							(x < g || x === g && v.x < s.x) && (g = x, s = v)
						}
				}
				for (n = i.firstItem(); n.p1.x !== s.x || n.p1.y !== s.y;) n = i.nextItem();
				var E = {
						x: h.x,
						y: h.y,
						i: h.i,
						reflex: void 0
					},
					r = {
						x: n.p1.x,
						y: n.p1.y,
						i: n.p1.i,
						reflex: void 0
					};
				return t.getNextItem().p0 = E, this.insertItem_(h, n.p1, t, o), this.insertItem_(r, E,
					t, o), n.p1 = r, t.setFirstItem(), i.concat(t), !0
			}, Oc.prototype.triangulate_ = function(t, e) {
				for (var i, r = !1, o = this.isSimple_(t, e); 3 < t.getLength();)
					if (o) {
						if (!this.clipEars_(t, e, o, r) && !this.classifyPoints_(t, e, r) && !this
							.resolveSelfIntersections_(t, e, !0)) break
					} else if (!this.clipEars_(t, e, o, r) && !this.classifyPoints_(t, e, r) && !this
					.resolveSelfIntersections_(t, e)) {
					if (!(o = this.isSimple_(t, e))) {
						this.splitPolygon_(t, e);
						break
					}
					r = !this.isClockwise_(t), this.classifyPoints_(t, e, r)
				}
				3 === t.getLength() && (i = this.indices.length, this.indices[i++] = t.getPrevItem().p0
					.i, this.indices[i++] = t.getCurrItem().p0.i, this.indices[i++] = t
					.getNextItem().p0.i)
			}, Oc.prototype.clipEars_ = function(t, e, i, r) {
				var o = this.indices.length,
					n = t.firstItem(),
					s = t.getPrevItem(),
					a = n,
					h = t.nextItem(),
					l = t.getNextItem(),
					u = !1;
				do {
					var p, c = a.p0,
						d = a.p1,
						_ = h.p1
				} while (!1 === d.reflex && (p = void 0, p = i ? 0 === this.getPointsInTriangle_(c, d,
							_, e, !0).length : r ? this.diagonalIsInside_(l.p1, _, d, c, s.p0) : this
						.diagonalIsInside_(s.p0, c, d, _, l.p1), !i && 0 !== this.getIntersections_({
							p0: c,
							p1: _
						}, e).length || !p || !i && !1 !== c.reflex && !1 !== _.reflex && zi([s.p0.x, s
							.p0.y, c.x, c.y, d.x, d.y, _.x, _.y, l.p1.x, l.p1.y
						], 0, 10, 2) !== !r || (this.indices[o++] = c.i, this.indices[o++] = d.i, this
							.indices[o++] = _.i, this.removeItem_(a, h, t, e), h === n && (n = l), u = !
							0)), s = t.getPrevItem(), a = t.getCurrItem(), h = t.nextItem(), l = t
					.getNextItem(), a !== n && 3 < t.getLength());
				return u
			}, Oc.prototype.resolveSelfIntersections_ = function(t, e, i) {
				var r = t.firstItem();
				t.nextItem();
				var o = r,
					n = t.nextItem(),
					s = !1;
				do {
					var a = this.calculateIntersection_(o.p0, o.p1, n.p0, n.p1, i);
					if (a) {
						var h = !1,
							l = this.vertices.length,
							u = this.indices.length,
							p = l / 2,
							c = t.prevItem();
						t.removeItem(), e.remove(c), h = c === r;
						l = void 0;
						if (i ? (h = a[0] === o.p0.x && a[1] === o.p0.y ? (t.prevItem(), l = o.p0, n
								.p0 = l, e.remove(o), h || o === r) : (l = n.p1, o.p1 = l, e.remove(
								n), h || n === r), t.removeItem()) : (l = this.createPoint_(a[0], a[1],
								p), o.p1 = l, n.p0 = l, e.update([Math.min(o.p0.x, o.p1.x), Math
								.min(o.p0.y, o.p1.y), Math.max(o.p0.x, o.p1.x), Math.max(o.p0.y,
									o.p1.y)
							], o), e.update([Math.min(n.p0.x, n.p1.x), Math.min(n.p0.y, n.p1.y),
								Math.max(n.p0.x, n.p1.x), Math.max(n.p0.y, n.p1.y)
							], n)), this.indices[u++] = c.p0.i, this.indices[u++] = c.p1.i, this
							.indices[+u] = l.i, s = !0, h) break
					}
				} while (o = t.getPrevItem(), n = t.nextItem(), o !== r);
				return s
			}, Oc.prototype.isSimple_ = function(t, e) {
				var i = t.firstItem(),
					r = i;
				do {
					if (this.getIntersections_(r, e).length) return !1
				} while ((r = t.nextItem()) !== i);
				return !0
			}, Oc.prototype.isClockwise_ = function(t) {
				for (var e = 2 * t.getLength(), i = new Array(e), r = t.firstItem(), o = r, n = 0; i[
						n++] = o.p0.x, i[n++] = o.p0.y, o = t.nextItem(), o !== r;);
				return zi(i, 0, e, 2)
			}, Oc.prototype.splitPolygon_ = function(t, e) {
				var i = t.firstItem(),
					r = i;
				do {
					var o = this.getIntersections_(r, e);
					if (o.length) {
						var n = o[0],
							s = this.vertices.length / 2,
							o = this.calculateIntersection_(r.p0, r.p1, n.p0, n.p1),
							s = this.createPoint_(o[0], o[1], s),
							a = new Ic,
							h = new Pc;
						this.insertItem_(s, r.p1, a, h), r.p1 = s, e.update([Math.min(r.p0.x, s.x), Math
							.min(r.p0.y, s.y), Math.max(r.p0.x, s.x), Math.max(r.p0.y, s.y)
						], r);
						for (var l = t.nextItem(); l !== n;) this.insertItem_(l.p0, l.p1, a, h), e
							.remove(l), t.removeItem(), l = t.getCurrItem();
						this.insertItem_(n.p0, s, a, h), n.p0 = s, e.update([Math.min(n.p1.x, s.x), Math
								.min(n.p1.y, s.y), Math.max(n.p1.x, s.x), Math.max(n.p1.y, s.y)
							], n), this.classifyPoints_(t, e, !1), this.triangulate_(t, e), this
							.classifyPoints_(a, h, !1), this.triangulate_(a, h);
						break
					}
				} while ((r = t.nextItem()) !== i)
			}, Oc.prototype.createPoint_ = function(t, e, i) {
				var r = this.vertices.length;
				return {
					x: this.vertices[r++] = t,
					y: this.vertices[+r] = e,
					i: i,
					reflex: void 0
				}
			}, Oc.prototype.insertItem_ = function(t, e, i, r) {
				var o = {
					p0: t,
					p1: e
				};
				return i.insertItem(o), r && r.insert([Math.min(t.x, e.x), Math.min(t.y, e.y), Math.max(
					t.x, e.x), Math.max(t.y, e.y)], o), o
			}, Oc.prototype.removeItem_ = function(t, e, i, r) {
				i.getCurrItem() === e && (i.removeItem(), t.p1 = e.p1, r.remove(e), r.update([Math.min(t
						.p0.x, t.p1.x), Math.min(t.p0.y, t.p1.y), Math.max(t.p0.x, t.p1.x),
					Math.max(t.p0.y, t.p1.y)
				], t))
			}, Oc.prototype.getPointsInTriangle_ = function(t, e, i, r, o) {
				for (var n = [], s = r.getInExtent([Math.min(t.x, e.x, i.x), Math.min(t.y, e.y, i.y),
						Math.max(t.x, e.x, i.x), Math.max(t.y, e.y, i.y)
					]), a = 0, h = s.length; a < h; ++a)
					for (var l in s[a]) {
						var u = s[a][l];
						"object" != typeof u || o && !u.reflex || u.x === t.x && u.y === t.y || u.x ===
							e.x && u.y === e.y || u.x === i.x && u.y === i.y || -1 !== n.indexOf(u) || !
							Gi([t.x, t.y, e.x, e.y, i.x, i.y], 0, 6, 2, u.x, u.y) || n.push(u)
					}
				return n
			}, Oc.prototype.getIntersections_ = function(t, e, i) {
				for (var r = t.p0, o = t.p1, n = e.getInExtent([Math.min(r.x, o.x), Math.min(r.y, o.y),
						Math.max(r.x, o.x), Math.max(r.y, o.y)
					]), s = [], a = 0, h = n.length; a < h; ++a) {
					var l = n[a];
					t !== l && (i || l.p0 !== o || l.p1 !== r) && this.calculateIntersection_(r, o, l
						.p0, l.p1, i) && s.push(l)
				}
				return s
			}, Oc.prototype.calculateIntersection_ = function(t, e, i, r, o) {
				var n = (r.y - i.y) * (e.x - t.x) - (r.x - i.x) * (e.y - t.y);
				if (0 != n) {
					r = ((r.x - i.x) * (t.y - i.y) - (r.y - i.y) * (t.x - i.x)) / n, n = ((e.x - t.x) *
						(t.y - i.y) - (e.y - t.y) * (t.x - i.x)) / n;
					if (!o && Vp < r && r < 1 - Vp && Vp < n && n < 1 - Vp || o && 0 <= r && r <= 1 &&
						0 <= n && n <= 1) return [t.x + r * (e.x - t.x), t.y + r * (e.y - t.y)]
				}
			}, Oc.prototype.diagonalIsInside_ = function(t, e, i, r, o) {
				if (void 0 === e.reflex || void 0 === r.reflex) return !1;
				var n = (i.x - r.x) * (e.y - r.y) > (i.y - r.y) * (e.x - r.x),
					o = (o.x - r.x) * (e.y - r.y) < (o.y - r.y) * (e.x - r.x),
					t = (t.x - e.x) * (r.y - e.y) > (t.y - e.y) * (r.x - e.x),
					i = (i.x - e.x) * (r.y - e.y) < (i.y - e.y) * (r.x - e.x),
					n = r.reflex ? o || n : o && n,
					t = e.reflex ? i || t : i && t;
				return n && t
			}, Oc.prototype.drawMultiPolygon = function(t, e) {
				for (var i = t.getEndss(), r = t.getStride(), o = this.indices.length, n = this
						.lineStringReplay.getCurrentIndex(), s = t.getFlatCoordinates(), a = 0, h = 0,
						l = i.length; h < l; ++h) {
					var u = i[h];
					if (0 < u.length) {
						var p = qt(s, a, u[0], r, -this.origin[0], -this.origin[1]);
						if (p.length) {
							for (var c, d = [], _ = 1, f = u.length; _ < f; ++_) u[_] !== u[_ - 1] && (
								c = qt(s, u[_ - 1], u[_], r, -this.origin[0], -this.origin[1]), d
								.push(c));
							this.lineStringReplay.drawPolygonCoordinates(p, d, r), this
								.drawCoordinates_(p, d, r)
						}
					}
					a = u[u.length - 1]
				}
				this.indices.length > o && (this.startIndices.push(o), this.startIndicesFeature.push(e),
						this.state_.changed && (this.styleIndices_.push(o), this.state_.changed = !1)),
					this.lineStringReplay.getCurrentIndex() > n && this.lineStringReplay
					.setPolygonStyle(e, n)
			}, Oc.prototype.drawPolygon = function(t, e) {
				var i = t.getEnds(),
					r = t.getStride();
				if (0 < i.length) {
					var o = t.getFlatCoordinates().map(Number),
						t = qt(o, 0, i[0], r, -this.origin[0], -this.origin[1]);
					if (t.length) {
						for (var n, s = [], a = 1, h = i.length; a < h; ++a) i[a] !== i[a - 1] && (n =
							qt(o, i[a - 1], i[a], r, -this.origin[0], -this.origin[1]), s.push(n));
						this.startIndices.push(this.indices.length), this.startIndicesFeature.push(e),
							this.state_.changed && (this.styleIndices_.push(this.indices.length), this
								.state_.changed = !1), this.lineStringReplay.setPolygonStyle(e), this
							.lineStringReplay.drawPolygonCoordinates(t, s, r), this.drawCoordinates_(t,
								s, r)
					}
				}
			}, Oc.prototype.finish = function(t) {
				this.verticesBuffer = new qp(this.vertices), this.indicesBuffer = new qp(this.indices),
					this.startIndices.push(this.indices.length), this.lineStringReplay.finish(t), 0 ===
					this.styleIndices_.length && 0 < this.styles_.length && (this.styles_ = []), this
					.vertices = null, this.indices = null
			}, Oc.prototype.getDeleteResourcesFunction = function(t) {
				var e = this.verticesBuffer,
					i = this.indicesBuffer,
					r = this.lineStringReplay.getDeleteResourcesFunction(t);
				return function() {
					t.deleteBuffer(e), t.deleteBuffer(i), r()
				}
			}, Oc.prototype.setUpProgram = function(t, e, i, r) {
				var o, n = e.getProgram(Sc, Cc);
				return this.defaultLocations_ ? o = this.defaultLocations_ : (o = new wc(t, n), this
					.defaultLocations_ = o), e.useProgram(n), t.enableVertexAttribArray(o
					.a_position), t.vertexAttribPointer(o.a_position, 2, 5126, !1, 8, 0), o
			}, Oc.prototype.shutDownProgram = function(t, e) {
				t.disableVertexAttribArray(e.a_position)
			}, Oc.prototype.drawReplay = function(t, e, i, r) {
				var o, n, s, a, h = t.getParameter(t.DEPTH_FUNC),
					l = t.getParameter(t.DEPTH_WRITEMASK);
				if (r || (t.enable(t.DEPTH_TEST), t.depthMask(!0), t.depthFunc(t.NOTEQUAL)), dt(i))
					for (s = this.startIndices[this.startIndices.length - 1], o = this.styleIndices_
						.length - 1; 0 <= o; --o) n = this.styleIndices_[o], a = this.styles_[o], this
						.setFillStyle_(t, a), this.drawElements(t, e, n, s), s = n;
				else this.drawReplaySkipping_(t, e, i);
				r || (t.disable(t.DEPTH_TEST), t.clear(t.DEPTH_BUFFER_BIT), t.depthMask(l), t.depthFunc(
					h))
			}, Oc.prototype.drawHitDetectionReplayOneByOne = function(t, e, i, r, o) {
				for (var n, s, a, h = this.startIndices.length - 2, l = this.startIndices[h + 1], u =
						this.styleIndices_.length - 1; 0 <= u; --u)
					for (s = this.styles_[u], this.setFillStyle_(t, s), a = this.styleIndices_[u]; 0 <=
						h && this.startIndices[h] >= a;) {
						if (n = this.startIndices[h], void 0 === i[ct(p = this.startIndicesFeature[
							h])] && p.getGeometry() && (void 0 === o || zt(o, p.getGeometry()
							.getExtent()))) {
							t.clear(t.COLOR_BUFFER_BIT | t.DEPTH_BUFFER_BIT), this.drawElements(t, e, n,
								l);
							var p = r(p);
							if (p) return p
						}
						h--, l = n
					}
			}, Oc.prototype.drawReplaySkipping_ = function(t, e, i) {
				for (var r, o, n, s, a = this.startIndices.length - 2, h = r = this.startIndices[a + 1],
						l = this.styleIndices_.length - 1; 0 <= l; --l) {
					for (o = this.styles_[l], this.setFillStyle_(t, o), n = this.styleIndices_[l]; 0 <=
						a && this.startIndices[a] >= n;) s = this.startIndices[a], i[ct(this
						.startIndicesFeature[a])] && (r !== h && (this.drawElements(t, e, r, h), t
						.clear(t.DEPTH_BUFFER_BIT)), h = s), a--, r = s;
					r !== h && (this.drawElements(t, e, r, h), t.clear(t.DEPTH_BUFFER_BIT)), r = h = n
				}
			}, Oc.prototype.setFillStyle_ = function(t, e) {
				t.uniform4fv(this.defaultLocations_.u_color, e)
			}, Oc.prototype.setFillStrokeStyle = function(t, e) {
				t = !((t = t ? t.getColor() : [0, 0, 0, 0]) instanceof CanvasGradient ||
					t instanceof CanvasPattern) && oo(t).map(function(t, e) {
					return 3 != e ? t / 255 : t
				}) || Bp;
				this.state_.fillColor && _t(t, this.state_.fillColor) || (this.state_.fillColor = t,
						this.state_.changed = !0, this.styles_.push(t)), e ? this.lineStringReplay
					.setFillStrokeStyle(null, e) : (e = new uo({
						color: [0, 0, 0, 0],
						width: 0
					}), this.lineStringReplay.setFillStrokeStyle(null, e))
			}, Oc),
			Fc = function(t, e) {
				this.space_ = e, this.emptyBlocks_ = [{
					x: 0,
					y: 0,
					width: t,
					height: t
				}], this.entries_ = {}, this.context_ = ds(t, t), this.canvas_ = this.context_.canvas
			};

		function Oc(t, e) {
			bc.call(this, t, e), this.lineStringReplay = new Ec(t, e), this.defaultLocations_ = null, this
				.styles_ = [], this.styleIndices_ = [], this.state_ = {
					fillColor: null,
					changed: !1
				}
		}
		Fc.prototype.get = function(t) {
			return this.entries_[t] || null
		}, Fc.prototype.add = function(t, e, i, r, o) {
			for (var n = 0, s = this.emptyBlocks_.length; n < s; ++n) {
				var a = this.emptyBlocks_[n];
				if (a.width >= e + this.space_ && a.height >= i + this.space_) {
					var h = {
						offsetX: a.x + this.space_,
						offsetY: a.y + this.space_,
						image: this.canvas_
					};
					return this.entries_[t] = h, r.call(o, this.context_, a.x + this.space_, a.y + this
						.space_), this.split_(n, a, e + this.space_, i + this.space_), h
				}
			}
			return null
		}, Fc.prototype.split_ = function(t, e, i, r) {
			var o, r = e.width - i > e.height - r ? (o = {
				x: e.x + i,
				y: e.y,
				width: e.width - i,
				height: e.height
			}, {
				x: e.x,
				y: e.y + r,
				width: i,
				height: e.height - r
			}) : (o = {
				x: e.x + i,
				y: e.y,
				width: e.width - i,
				height: r
			}, {
				x: e.x,
				y: e.y + r,
				width: e.width,
				height: e.height - r
			});
			this.updateBlocks_(t, o, r)
		}, Fc.prototype.updateBlocks_ = function(t, e, i) {
			t = [t, 1];
			0 < e.width && 0 < e.height && t.push(e), 0 < i.width && 0 < i.height && t.push(i), this
				.emptyBlocks_.splice.apply(this.emptyBlocks_, t)
		};
		var Ac = Fc,
			Nc = function(t) {
				t = t || {};
				this.currentSize_ = void 0 !== t.initialSize ? t.initialSize : 256, this.maxSize_ =
					void 0 !== t.maxSize ? t.maxSize : void 0 !== ep ? ep : 2048, this.space_ = void 0 !== t
					.space ? t.space : 1, this.atlases_ = [new Ac(this.currentSize_, this.space_)], this
					.currentHitSize_ = this.currentSize_, this.hitAtlases_ = [new Ac(this.currentHitSize_,
						this.space_)]
			};
		Nc.prototype.getInfo = function(t) {
			var e = this.getInfo_(this.atlases_, t);
			if (!e) return null;
			t = this.getInfo_(this.hitAtlases_, t);
			return this.mergeInfos_(e, t)
		}, Nc.prototype.getInfo_ = function(t, e) {
			for (var i = 0, r = t.length; i < r; ++i) {
				var o = t[i].get(e);
				if (o) return o
			}
			return null
		}, Nc.prototype.mergeInfos_ = function(t, e) {
			return {
				offsetX: t.offsetX,
				offsetY: t.offsetY,
				image: t.image,
				hitImage: e.image
			}
		}, Nc.prototype.add = function(t, e, i, r, o, n) {
			if (e + this.space_ > this.maxSize_ || i + this.space_ > this.maxSize_) return null;
			r = this.add_(!1, t, e, i, r, n);
			if (!r) return null;
			o = void 0 !== o ? o : L, n = this.add_(!0, t, e, i, o, n);
			return this.mergeInfos_(r, n)
		}, Nc.prototype.add_ = function(t, e, i, r, o, n) {
			for (var s, a, h = t ? this.hitAtlases_ : this.atlases_, l = 0, u = h.length; l < u; ++l) {
				if (a = (s = h[l]).add(e, i, r, o, n)) return a;
				a || l !== u - 1 || (a = void 0, t ? (a = Math.min(2 * this.currentHitSize_, this
					.maxSize_), this.currentHitSize_ = a) : (a = Math.min(2 * this.currentSize_,
					this.maxSize_), this.currentSize_ = a), s = new Ac(a, this.space_), h.push(
					s), ++u)
			}
			return null
		};
		var Gc, Dc, kc, jc, Uc, Yc = Nc,
			Bc = ((Uc = pc) && (id.__proto__ = Uc), ((id.prototype = Object.create(Uc && Uc.prototype))
				.constructor = id).prototype.drawText = function(t, e) {
				if (this.text_) {
					var i = null,
						r = 2,
						o = 2;
					switch (t.getType()) {
						case Ht.POINT:
						case Ht.MULTI_POINT:
							r = (i = t.getFlatCoordinates()).length, o = t.getStride();
							break;
						case Ht.CIRCLE:
							i = t.getCenter();
							break;
						case Ht.LINE_STRING:
							i = t.getFlatMidpoint();
							break;
						case Ht.MULTI_LINE_STRING:
							r = (i = t.getFlatMidpoints()).length;
							break;
						case Ht.POLYGON:
							i = t.getFlatInteriorPoint();
							break;
						case Ht.MULTI_POLYGON:
							r = (i = t.getFlatInteriorPoints()).length
					}
					this.startIndices.push(this.indices.length), this.startIndicesFeature.push(e);
					for (var n, s, a, h, l, u, p, c = this.currAtlas_, d = this.text_.split("\n"), e =
							this.getTextSize_(d), _ = Math.round(e[0] * this.textAlign_ - this
							.offsetX_), f = Math.round(e[1] * this.textBaseline_ - this.offsetY_), g =
							this.state_.lineWidth / 2 * this.state_.scale, y = 0, m = d.length; y <
						m; ++y)
						for (a = 0, h = c.height * y, n = 0, s = (l = d[y].split("")).length; n < s; ++
							n)(u = c.atlas.getInfo(l[n])) && (p = u.image, this.anchorX = _ - a, this
							.anchorY = f - h, this.originX = 0 === n ? u.offsetX - g : u.offsetX,
							this.originY = u.offsetY, this.height = c.height, this.width = 0 ===
							n || n === l.length - 1 ? c.width[l[n]] + g : c.width[l[n]], this
							.imageHeight = p.height, this.imageWidth = p.width, 0 === this.images_
							.length ? this.images_.push(p) : ct(this.images_[this.images_.length -
								1]) != ct(p) && (this.groupIndices.push(this.indices.length), this
								.images_.push(p)), this.drawText_(i, 0, r, o)), a += this.width
				}
			}, id.prototype.getTextSize_ = function(t) {
				var n = this,
					s = this.currAtlas_,
					e = t.length * s.height;
				return [t.map(function(t) {
					for (var e = 0, i = 0, r = t.length; i < r; ++i) {
						var o = t[i];
						s.width[o] || n.addCharToAtlas_(o), e += s.width[o] || 0
					}
					return e
				}).reduce(function(t, e) {
					return Math.max(t, e)
				}), e]
			}, id.prototype.drawText_ = function(t, e, i, r) {
				for (var o = e, n = i; o < n; o += r) this.drawCoordinates(t, e, i, r)
			}, id.prototype.addCharToAtlas_ = function(r) {
				var t, o, e;
				1 === r.length && (t = this.currAtlas_, o = this.state_, (e = this.measureCanvas_
					.getContext("2d")).font = o.font, e = Math.ceil(e.measureText(r).width * o
					.scale), t.atlas.add(r, e, t.height, function(t, e, i) {
					t.font = o.font, t.fillStyle = o.fillColor, t.strokeStyle = o
						.strokeColor, t.lineWidth = o.lineWidth, t.lineCap = o.lineCap, t
						.lineJoin = o.lineJoin, t.miterLimit = o.miterLimit, t.textAlign =
						"left", t.textBaseline = "top", lr && o.lineDash && (t.setLineDash(o
							.lineDash), t.lineDashOffset = o.lineDashOffset), 1 !== o
						.scale && t.setTransform(o.scale, 0, 0, o.scale, 0, 0), o
						.strokeColor && t.strokeText(r, e, i), o.fillColor && t.fillText(r,
							e, i)
				}) && (t.width[r] = e))
			}, id.prototype.finish = function(t) {
				var e = t.getGL();
				this.groupIndices.push(this.indices.length), this.hitDetectionGroupIndices = this
					.groupIndices, this.verticesBuffer = new qp(this.vertices), this.indicesBuffer =
					new qp(this.indices), this.createTextures(this.textures_, this.images_, {}, e), this
					.state_ = {
						strokeColor: null,
						lineCap: void 0,
						lineDash: null,
						lineDashOffset: void 0,
						lineJoin: void 0,
						lineWidth: 0,
						miterLimit: void 0,
						fillColor: null,
						font: void 0,
						scale: void 0
					}, this.text_ = "", this.textAlign_ = void 0, this.textBaseline_ = void 0, this
					.offsetX_ = void 0, this.offsetY_ = void 0, this.images_ = null, this.atlases_ = {},
					this.currAtlas_ = void 0, Uc.prototype.finish.call(this, t)
			}, id.prototype.setTextStyle = function(t) {
				var e, i = this.state_,
					r = t.getFill(),
					o = t.getStroke();
				t && t.getText() && (r || o) ? (r ? (r = r.getColor(), i.fillColor = gl(r || Bp)) : i
					.fillColor = null, o ? (e = o.getColor(), i.strokeColor = gl(e || Xp), i
						.lineWidth = o.getWidth() || 1, i.lineCap = o.getLineCap() || "round", i
						.lineDashOffset = o.getLineDashOffset() || 0, i.lineJoin = o
					.getLineJoin() || "round", i.miterLimit = o.getMiterLimit() || 10, e = o
						.getLineDash(), i.lineDash = e ? e.slice() : zp) : (i.strokeColor = null, i
						.lineWidth = 0), i.font = t.getFont() || "10px sans-serif", i.scale = t
					.getScale() || 1, this.text_ = t.getText(), o = gu[t.getTextAlign()], e = gu[t
						.getTextBaseline()], this.textAlign_ = void 0 === o ? .5 : o, this
					.textBaseline_ = void 0 === e ? .5 : e, this.offsetX_ = t.getOffsetX() || 0,
					this.offsetY_ = t.getOffsetY() || 0, this.rotateWithView = !!t
					.getRotateWithView(), this.rotation = t.getRotation() || 0, this.currAtlas_ =
					this.getAtlas_(i)) : this.text_ = ""
			}, id.prototype.getAtlas_ = function(t) {
				var e, i = [];
				for (e in t) !t[e] && 0 !== t[e] || (Array.isArray(t[e]) ? i = i.concat(t[e]) : i.push(
					t[e]));
				var r, o = this.calculateHash_(i);
				return this.atlases_[o] || ((r = this.measureCanvas_.getContext("2d")).font = t.font,
					r = Math.ceil((1.5 * r.measureText("M").width + t.lineWidth / 2) * t.scale),
					this.atlases_[o] = {
						atlas: new Yc({
							space: t.lineWidth + 1
						}),
						width: {},
						height: r
					}), this.atlases_[o]
			}, id.prototype.calculateHash_ = function(t) {
				for (var e = "", i = 0, r = t.length; i < r; ++i) e += t[i];
				return e
			}, id.prototype.getTextures = function(t) {
				return this.textures_
			}, id.prototype.getHitDetectionTextures = function() {
				return this.textures_
			}, id),
			zc = [1, 1],
			Xc = {
				Circle: Jp,
				Image: cc,
				LineString: Ec,
				Polygon: Mc,
				Text: Bc
			},
			Vc = ((jc = ru) && (ed.__proto__ = jc), ((ed.prototype = Object.create(jc && jc.prototype))
				.constructor = ed).prototype.addDeclutter = function(t) {
				return []
			}, ed.prototype.getDeleteResourcesFunction = function(t) {
				var e, o = [];
				for (e in this.replaysByZIndex_) {
					var i, r = this.replaysByZIndex_[e];
					for (i in r) o.push(r[i].getDeleteResourcesFunction(t))
				}
				return function() {
					for (var t, e = arguments, i = o.length, r = 0; r < i; r++) t = o[r].apply(this,
						e);
					return t
				}
			}, ed.prototype.finish = function(t) {
				for (var e in this.replaysByZIndex_) {
					var i, r = this.replaysByZIndex_[e];
					for (i in r) r[i].finish(t)
				}
			}, ed.prototype.getReplay = function(t, e) {
				var i = void 0 !== t ? t.toString() : "0",
					t = this.replaysByZIndex_[i];
				void 0 === t && (t = {}, this.replaysByZIndex_[i] = t);
				i = t[e];
				return void 0 === i && (i = new Xc[e](this.tolerance_, this.maxExtent_), t[e] = i), i
			}, ed.prototype.isEmpty = function() {
				return dt(this.replaysByZIndex_)
			}, ed.prototype.replay = function(t, e, i, r, o, n, s, a) {
				var h, l, u, p, c, d, _ = Object.keys(this.replaysByZIndex_).map(Number);
				for (_.sort(rt), h = 0, l = _.length; h < l; ++h)
					for (c = this.replaysByZIndex_[_[h].toString()], u = 0, p = fu.length; u < p; ++u)
						void 0 !== (d = c[fu[u]]) && d.replay(t, e, i, r, o, n, s, a, void 0, !1)
			}, ed.prototype.replayHitDetection_ = function(t, e, i, r, o, n, s, a, h, l, u) {
				var p, c, d, _, f, g, y = Object.keys(this.replaysByZIndex_).map(Number);
				for (y.sort(function(t, e) {
						return e - t
					}), p = 0, c = y.length; p < c; ++p)
					for (_ = this.replaysByZIndex_[y[p].toString()], d = fu.length - 1; 0 <= d; --d)
						if (void 0 !== (f = _[fu[d]]) && (g = f.replay(t, e, i, r, o, n, s, a, h, l,
							u))) return g
			}, ed.prototype.forEachFeatureAtCoordinate = function(t, e, i, r, o, n, s, a, h, l) {
				var u, p = e.getGL();
				return p.bindFramebuffer(p.FRAMEBUFFER, e.getHitDetectionFramebuffer()), void 0 !== this
					.renderBuffer_ && (u = gt(Rt(t), r * this.renderBuffer_)), this.replayHitDetection_(
						e, t, r, o, zc, s, a, h,
						function(t) {
							var e = new Uint8Array(4);
							if (p.readPixels(0, 0, 1, 1, p.RGBA, p.UNSIGNED_BYTE, e), 0 < e[3]) {
								t = l(t);
								if (t) return t
							}
						}, !0, u)
			}, ed.prototype.hasFeatureAtCoordinate = function(t, e, i, r, o, n, s, a, h) {
				var l = e.getGL();
				return l.bindFramebuffer(l.FRAMEBUFFER, e.getHitDetectionFramebuffer()), void 0 !== this
					.replayHitDetection_(e, t, r, o, zc, s, a, h, function(t) {
						var e = new Uint8Array(4);
						return l.readPixels(0, 0, 1, 1, l.RGBA, l.UNSIGNED_BYTE, e), 0 < e[3]
					}, !1)
			}, ed),
			Wc = ((kc = vl) && (td.__proto__ = kc), ((td.prototype = Object.create(kc && kc.prototype))
				.constructor = td).prototype.drawText_ = function(t, e) {
				var i = this.context_,
					t = t.getReplay(0, ou.TEXT);
				t.setTextStyle(this.textStyle_), t.drawText(e, null), t.finish(i), t.replay(this
					.context_, this.center_, this.resolution_, this.rotation_, this.size_, this
					.pixelRatio_, 1, {}, void 0, !1), t.getDeleteResourcesFunction(i)()
			}, td.prototype.setStyle = function(t) {
				this.setFillStrokeStyle(t.getFill(), t.getStroke()), this.setImageStyle(t.getImage()),
					this.setTextStyle(t.getText())
			}, td.prototype.drawGeometry = function(t) {
				switch (t.getType()) {
					case Ht.POINT:
						this.drawPoint(t, null);
						break;
					case Ht.LINE_STRING:
						this.drawLineString(t, null);
						break;
					case Ht.POLYGON:
						this.drawPolygon(t, null);
						break;
					case Ht.MULTI_POINT:
						this.drawMultiPoint(t, null);
						break;
					case Ht.MULTI_LINE_STRING:
						this.drawMultiLineString(t, null);
						break;
					case Ht.MULTI_POLYGON:
						this.drawMultiPolygon(t, null);
						break;
					case Ht.GEOMETRY_COLLECTION:
						this.drawGeometryCollection(t, null);
						break;
					case Ht.CIRCLE:
						this.drawCircle(t, null)
				}
			}, td.prototype.drawFeature = function(t, e) {
				t = e.getGeometryFunction()(t);
				t && zt(this.extent_, t.getExtent()) && (this.setStyle(e), this.drawGeometry(t))
			}, td.prototype.drawGeometryCollection = function(t, e) {
				for (var i = t.getGeometriesArray(), r = 0, o = i.length; r < o; ++r) this.drawGeometry(
					i[r])
			}, td.prototype.drawPoint = function(t, e) {
				var i = this.context_,
					r = new Vc(1, this.extent_),
					o = r.getReplay(0, ou.IMAGE);
				o.setImageStyle(this.imageStyle_), o.drawPoint(t, e), o.finish(i), o.replay(this
						.context_, this.center_, this.resolution_, this.rotation_, this.size_, this
						.pixelRatio_, 1, {}, void 0, !1), o.getDeleteResourcesFunction(i)(), this
					.textStyle_ && this.drawText_(r, t)
			}, td.prototype.drawMultiPoint = function(t, e) {
				var i = this.context_,
					r = new Vc(1, this.extent_),
					o = r.getReplay(0, ou.IMAGE);
				o.setImageStyle(this.imageStyle_), o.drawMultiPoint(t, e), o.finish(i), o.replay(this
						.context_, this.center_, this.resolution_, this.rotation_, this.size_, this
						.pixelRatio_, 1, {}, void 0, !1), o.getDeleteResourcesFunction(i)(), this
					.textStyle_ && this.drawText_(r, t)
			}, td.prototype.drawLineString = function(t, e) {
				var i = this.context_,
					r = new Vc(1, this.extent_),
					o = r.getReplay(0, ou.LINE_STRING);
				o.setFillStrokeStyle(null, this.strokeStyle_), o.drawLineString(t, e), o.finish(i), o
					.replay(this.context_, this.center_, this.resolution_, this.rotation_, this.size_,
						this.pixelRatio_, 1, {}, void 0, !1), o.getDeleteResourcesFunction(i)(), this
					.textStyle_ && this.drawText_(r, t)
			}, td.prototype.drawMultiLineString = function(t, e) {
				var i = this.context_,
					r = new Vc(1, this.extent_),
					o = r.getReplay(0, ou.LINE_STRING);
				o.setFillStrokeStyle(null, this.strokeStyle_), o.drawMultiLineString(t, e), o.finish(i),
					o.replay(this.context_, this.center_, this.resolution_, this.rotation_, this.size_,
						this.pixelRatio_, 1, {}, void 0, !1), o.getDeleteResourcesFunction(i)(), this
					.textStyle_ && this.drawText_(r, t)
			}, td.prototype.drawPolygon = function(t, e) {
				var i = this.context_,
					r = new Vc(1, this.extent_),
					o = r.getReplay(0, ou.POLYGON);
				o.setFillStrokeStyle(this.fillStyle_, this.strokeStyle_), o.drawPolygon(t, e), o.finish(
						i), o.replay(this.context_, this.center_, this.resolution_, this.rotation_, this
						.size_, this.pixelRatio_, 1, {}, void 0, !1), o.getDeleteResourcesFunction(i)(),
					this.textStyle_ && this.drawText_(r, t)
			}, td.prototype.drawMultiPolygon = function(t, e) {
				var i = this.context_,
					r = new Vc(1, this.extent_),
					o = r.getReplay(0, ou.POLYGON);
				o.setFillStrokeStyle(this.fillStyle_, this.strokeStyle_), o.drawMultiPolygon(t, e), o
					.finish(i), o.replay(this.context_, this.center_, this.resolution_, this.rotation_,
						this.size_, this.pixelRatio_, 1, {}, void 0, !1), o.getDeleteResourcesFunction(
						i)(), this.textStyle_ && this.drawText_(r, t)
			}, td.prototype.drawCircle = function(t, e) {
				var i = this.context_,
					r = new Vc(1, this.extent_),
					o = r.getReplay(0, ou.CIRCLE);
				o.setFillStrokeStyle(this.fillStyle_, this.strokeStyle_), o.drawCircle(t, e), o.finish(
						i), o.replay(this.context_, this.center_, this.resolution_, this.rotation_, this
						.size_, this.pixelRatio_, 1, {}, void 0, !1), o.getDeleteResourcesFunction(i)(),
					this.textStyle_ && this.drawText_(r, t)
			}, td.prototype.setImageStyle = function(t) {
				this.imageStyle_ = t
			}, td.prototype.setFillStrokeStyle = function(t, e) {
				this.fillStyle_ = t, this.strokeStyle_ = e
			}, td.prototype.setTextStyle = function(t) {
				this.textStyle_ = t
			}, td),
			Kc = new Fp(
				"precision mediump float;\nvarying vec2 v_texCoord;\n\n\nuniform float u_opacity;\nuniform sampler2D u_texture;\n\nvoid main(void) {\n  vec4 texColor = texture2D(u_texture, v_texCoord);\n  gl_FragColor.rgb = texColor.rgb;\n  gl_FragColor.a = texColor.a * u_opacity;\n}\n"
				),
			Hc = new Op(
				"varying vec2 v_texCoord;\n\n\nattribute vec2 a_position;\nattribute vec2 a_texCoord;\n\nuniform mat4 u_texCoordMatrix;\nuniform mat4 u_projectionMatrix;\n\nvoid main(void) {\n  gl_Position = u_projectionMatrix * vec4(a_position, 0., 1.);\n  v_texCoord = (u_texCoordMatrix * vec4(a_texCoord, 0., 1.)).st;\n}\n\n\n"
				),
			Zc = function(t, e) {
				this.u_texCoordMatrix = t.getUniformLocation(e, "u_texCoordMatrix"), this
					.u_projectionMatrix = t.getUniformLocation(e, "u_projectionMatrix"), this.u_opacity = t
					.getUniformLocation(e, "u_opacity"), this.u_texture = t.getUniformLocation(e,
						"u_texture"), this.a_position = t.getAttribLocation(e, "a_position"), this
					.a_texCoord = t.getAttribLocation(e, "a_texCoord")
			},
			qc = ((Dc = Gl) && ($c.__proto__ = Dc), (($c.prototype = Object.create(Dc && Dc.prototype))
				.constructor = $c).prototype.bindFramebuffer = function(t, e) {
				var i, r = this.mapRenderer.getGL();
				void 0 === this.framebufferDimension || this.framebufferDimension != e ? (i = function(
						t, e, i) {
						t.isContextLost() || (t.deleteFramebuffer(e), t.deleteTexture(i))
					}.bind(null, r, this.framebuffer, this.texture), t.postRenderFunctions.push(i),
					t = nc(r, e, e), i = r.createFramebuffer(), r.bindFramebuffer(36160, i), r
					.framebufferTexture2D(36160, 36064, Sp, t, 0), this.texture = t, this
					.framebuffer = i, this.framebufferDimension = e) : r.bindFramebuffer(36160, this
					.framebuffer)
			}, $c.prototype.composeFrame = function(t, e, i) {
				this.dispatchComposeEvent_(Zr, i, t), i.bindBuffer(34962, this.arrayBuffer_);
				var r, o = i.getGL(),
					n = i.getProgram(Kc, Hc);
				this.defaultLocations_ ? r = this.defaultLocations_ : (r = new Zc(o, n), this
						.defaultLocations_ = r), i.useProgram(n) && (o.enableVertexAttribArray(r
							.a_position), o.vertexAttribPointer(r.a_position, 2, 5126, !1, 16, 0), o
						.enableVertexAttribArray(r.a_texCoord), o.vertexAttribPointer(r.a_texCoord, 2,
							5126, !1, 16, 8), o.uniform1i(r.u_texture, 0)), o.uniformMatrix4fv(r
						.u_texCoordMatrix, !1, jp(this.tmpMat4_, this.getTexCoordMatrix())), o
					.uniformMatrix4fv(r.u_projectionMatrix, !1, jp(this.tmpMat4_, this
						.getProjectionMatrix())), o.uniform1f(r.u_opacity, e.opacity), o.bindTexture(Sp,
						this.getTexture()), o.drawArrays(5, 0, 4), this.dispatchComposeEvent_(Hr, i, t)
			}, $c.prototype.dispatchComposeEvent_ = function(t, e, i) {
				var r, o, n, s, a, h, l = this.getLayer();
				l.hasListener(t) && (r = (a = i.viewState).resolution, h = i.pixelRatio, o = i.extent,
					n = a.center, s = a.rotation, a = i.size, h = new Wc(e, n, r, s, a, o, h), e =
					new Wh(t, h, i, null, e), l.dispatchEvent(e))
			}, $c.prototype.getTexCoordMatrix = function() {
				return this.texCoordMatrix
			}, $c.prototype.getTexture = function() {
				return this.texture
			}, $c.prototype.getProjectionMatrix = function() {
				return this.projectionMatrix
			}, $c.prototype.handleWebGLContextLost = function() {
				this.texture = null, this.framebuffer = null, this.framebufferDimension = void 0
			}, $c.prototype.prepareFrame = function(t, e, i) {
				return a()
			}, $c.prototype.forEachLayerAtPixel = function(t, e, i, r) {
				return a()
			}, $c),
			Jc = ((Gc = qc) && (Qc.__proto__ = Gc), ((Qc.prototype = Object.create(Gc && Gc.prototype))
				.constructor = Qc).prototype.createTexture_ = function(t) {
				t = t.getImage();
				return sc(this.mapRenderer.getGL(), t, 33071, 33071)
			}, Qc.prototype.prepareFrame = function(t, e, i) {
				var r, o = this.mapRenderer.getGL(),
					n = t.pixelRatio,
					s = t.viewState,
					a = s.center,
					h = s.resolution,
					l = s.rotation,
					u = this.image_,
					p = this.texture,
					c = this.getLayer().getSource(),
					d = t.viewHints,
					_ = t.extent;
				return void 0 !== e.extent && (_ = jt(_, e.extent)), d[0] || d[1] || Xt(_) || (s = s
					.projection, (s = c.getImage(_, h, n, s)) && this.loadImage(s) && (u = s, p =
						this.createTexture_(s), this.texture) && (r = function(t, e) {
						t.isContextLost() || t.deleteTexture(e)
					}.bind(null, o, this.texture), t.postRenderFunctions.push(r))), u && (r = this
					.mapRenderer.getContext().getCanvas(), this.updateProjectionMatrix_(r.width, r
						.height, n, a, h, l, u.getExtent()), this.hitTransformationMatrix_ = null,
					qe(l = this.texCoordMatrix), ii(l, 1, -1), ri(l, 0, -1), this.image_ = u, this
					.texture = p), !!u
			}, Qc.prototype.updateProjectionMatrix_ = function(t, e, i, r, o, n, s) {
				t *= o, e *= o, o = this.projectionMatrix;
				qe(o), ii(o, 2 * i / t, 2 * i / e), ei(o, -n), ri(o, s[0] - r[0], s[1] - r[1]), ii(o, (
					s[2] - s[0]) / 2, (s[3] - s[1]) / 2), ri(o, 1, 1)
			}, Qc.prototype.forEachLayerAtPixel = function(t, e, i, r) {
				if (this.image_ && this.image_.getImage()) {
					var o = [this.image_.getImage().width, this.image_.getImage().height];
					this.hitTransformationMatrix_ || (this.hitTransformationMatrix_ = this
						.getHitTransformationMatrix_(e.size, o));
					t = ti(this.hitTransformationMatrix_, t.slice());
					if (!(t[0] < 0 || t[0] > o[0] || t[1] < 0 || t[1] > o[1])) {
						this.hitCanvasContext_ || (this.hitCanvasContext_ = ds(1, 1)), this
							.hitCanvasContext_.clearRect(0, 0, 1, 1), this.hitCanvasContext_.drawImage(
								this.image_.getImage(), t[0], t[1], 1, 1, 0, 0, 1, 1);
						t = this.hitCanvasContext_.getImageData(0, 0, 1, 1).data;
						return 0 < t[3] ? i.call(r, this.getLayer(), t) : void 0
					}
				}
			}, Qc.prototype.getHitTransformationMatrix_ = function(t, e) {
				var i = [1, 0, 0, 1, 0, 0];
				ri(i, -1, -1), ii(i, 2 / t[0], 2 / t[1]), ri(i, 0, t[1]), ii(i, 1, -1);
				var r = ni(this.projectionMatrix.slice()),
					t = [1, 0, 0, 1, 0, 0];
				return ri(t, 0, e[1]), ii(t, 1, -1), ii(t, e[0] / 2, e[1] / 2), ri(t, 1, 1), Je(t, r),
					Je(t, i), t
			}, Qc);

		function Qc(t, e) {
			Gc.call(this, t, e), this.image_ = null, this.hitCanvasContext_ = null, this
				.hitTransformationMatrix_ = null
		}

		function $c(t, e) {
			Dc.call(this, e), this.mapRenderer = t, this.arrayBuffer_ = new qp([-1, -1, 0, 0, 1, -1, 1, 0, -
					1, 1, 0, 1, 1, 1, 1, 1
				]), this.texture = null, this.framebuffer = null, this.framebufferDimension = void 0, this
				.texCoordMatrix = [1, 0, 0, 1, 0, 0], this.projectionMatrix = [1, 0, 0, 1, 0, 0], this
				.tmpMat4_ = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1], this.defaultLocations_ = null
		}

		function td(t, e, i, r, o, n, s) {
			kc.call(this), this.context_ = t, this.center_ = e, this.extent_ = n, this.pixelRatio_ = s, this
				.size_ = o, this.rotation_ = r, this.resolution_ = i, this.imageStyle_ = null, this
				.fillStyle_ = null, this.strokeStyle_ = null, this.textStyle_ = null
		}

		function ed(t, e, i) {
			jc.call(this), this.maxExtent_ = e, this.tolerance_ = t, this.renderBuffer_ = i, this
				.replaysByZIndex_ = {}
		}

		function id(t, e) {
			Uc.call(this, t, e), this.images_ = [], this.textures_ = [], this.measureCanvas_ = ds(0, 0)
				.canvas, this.state_ = {
					strokeColor: null,
					lineCap: void 0,
					lineDash: null,
					lineDashOffset: void 0,
					lineJoin: void 0,
					lineWidth: 0,
					miterLimit: void 0,
					fillColor: null,
					font: void 0,
					scale: void 0
				}, this.text_ = "", this.textAlign_ = void 0, this.textBaseline_ = void 0, this.offsetX_ =
				void 0, this.offsetY_ = void 0, this.atlases_ = {}, this.currAtlas_ = void 0, this.scale =
				1, this.opacity = 1
		}
		Jc.handles = function(t) {
			return t.getType() === zh.IMAGE
		}, Jc.create = function(t, e) {
			return new Jc(t, e)
		};
		var rd, od, nd = Jc,
			sd = ((od = Ol) && (ld.__proto__ = od), ((ld.prototype = Object.create(od && od.prototype))
				.constructor = ld).prototype.bindTileTexture = function(t, e, i, r, o) {
				var n, s, a, h = this.getGL(),
					l = t.getKey();
				this.textureCache_.containsKey(l) ? (a = this.textureCache_.get(l), h.bindTexture(Sp, a
					.texture), a.magFilter != r && (h.texParameteri(Sp, 10240, r), a.magFilter =
					r), a.minFilter != o && (h.texParameteri(Sp, 10241, o), a.minFilter = o)) : (n =
					h.createTexture(), s = t, h.bindTexture(Sp, n), 0 < i ? (a = this
						.clipTileContext_.canvas, t = this.clipTileContext_, this
						.clipTileCanvasWidth_ !== e[0] || this.clipTileCanvasHeight_ !== e[1] ? (a
							.width = e[0], a.height = e[1], this.clipTileCanvasWidth_ = e[0], this
							.clipTileCanvasHeight_ = e[1]) : t.clearRect(0, 0, e[0], e[1]), t
						.drawImage(s.getImage(), i, i, e[0], e[1], 0, 0, e[0], e[1]), h.texImage2D(
							Sp, 0, 6408, 6408, 5121, a)) : h.texImage2D(Sp, 0, 6408, 6408, 5121, s
						.getImage()), h.texParameteri(Sp, 10240, r), h.texParameteri(Sp, 10241, o),
					h.texParameteri(Sp, xp, 33071), h.texParameteri(Sp, Ep, 33071), this
					.textureCache_.set(l, {
						texture: n,
						magFilter: r,
						minFilter: o
					}))
			}, ld.prototype.dispatchRenderEvent = function(t, e) {
				var i, r, o, n, s, a, h, l = this.getMap();
				l.hasListener(t) && (h = this.context_, i = e.extent, r = e.size, s = e.viewState, a = e
					.pixelRatio, o = s.resolution, n = s.center, s = s.rotation, a = new Wc(h, n, o,
						s, r, i, a), h = new Wh(t, a, e, null, h), l.dispatchEvent(h))
			}, ld.prototype.disposeInternal = function() {
				var e = this.getGL();
				e.isContextLost() || this.textureCache_.forEach(function(t) {
					t && e.deleteTexture(t.texture)
				}), this.context_.dispose(), od.prototype.disposeInternal.call(this)
			}, ld.prototype.expireCache_ = function(t, e) {
				for (var i, r = this.getGL(); 1024 < this.textureCache_.getCount() - this
					.textureCacheFrameMarkerCount_;) {
					if (i = this.textureCache_.peekLast()) r.deleteTexture(i.texture);
					else {
						if (+this.textureCache_.peekLastKey() == e.index) break;
						--this.textureCacheFrameMarkerCount_
					}
					this.textureCache_.pop()
				}
			}, ld.prototype.getContext = function() {
				return this.context_
			}, ld.prototype.getGL = function() {
				return this.gl_
			}, ld.prototype.getTileTextureQueue = function() {
				return this.tileTextureQueue_
			}, ld.prototype.handleWebGLContextLost = function(t) {
				t.preventDefault(), this.textureCache_.clear(), this.textureCacheFrameMarkerCount_ = 0;
				var e, i = this.getLayerRenderers();
				for (e in i) i[e].handleWebGLContextLost()
			}, ld.prototype.handleWebGLContextRestored = function() {
				this.initializeGL_(), this.getMap().render()
			}, ld.prototype.initializeGL_ = function() {
				var t = this.gl_;
				t.activeTexture(33984), t.blendFuncSeparate(770, 771, 1, 771), t.disable(2884), t
					.disable(2929), t.disable(3089), t.disable(2960)
			}, ld.prototype.isTileTextureLoaded = function(t) {
				return this.textureCache_.containsKey(t.getKey())
			}, ld.prototype.renderFrame = function(t) {
				var e = this.getContext(),
					i = this.getGL();
				if (i.isContextLost()) return !1;
				if (!t) return this.renderedVisible_ && (this.canvas_.style.display = "none", this
					.renderedVisible_ = !1), !1;
				this.focus_ = t.focus, this.textureCache_.set((-t.index).toString(), null), ++this
					.textureCacheFrameMarkerCount_, this.dispatchRenderEvent(Zr, t);
				var r = [],
					o = t.layerStatesArray;
				ht(o, Rl);
				for (var n = t.viewState.resolution, s = 0, a = o.length; s < a; ++s) {
					var h = o[s];
					Js(h, n) && h.sourceState == bs && this.getLayerRenderer(h.layer).prepareFrame(t, h,
						e) && r.push(h)
				}
				var l = t.size[0] * t.pixelRatio,
					u = t.size[1] * t.pixelRatio;
				for (this.canvas_.width == l && this.canvas_.height == u || (this.canvas_.width = l,
						this.canvas_.height = u), i.bindFramebuffer(36160, null), i.clearColor(0, 0, 0,
						0), i.clear(16384), i.enable(3042), i.viewport(0, 0, this.canvas_.width, this
						.canvas_.height), s = 0, a = r.length; s < a; ++s) {
					var p = r[s];
					this.getLayerRenderer(p.layer).composeFrame(t, p, e)
				}
				this.renderedVisible_ || (this.canvas_.style.display = "", this.renderedVisible_ = !0),
					this.calculateMatrices2D(t), 1024 < this.textureCache_.getCount() - this
					.textureCacheFrameMarkerCount_ && t.postRenderFunctions.push(this.expireCache_.bind(
						this)), this.tileTextureQueue_.isEmpty() || (t.postRenderFunctions.push(this
						.loadNextTileTexture_), t.animate = !0), this.dispatchRenderEvent(Hr, t), this
					.scheduleRemoveUnusedLayerRenderers(t), this.scheduleExpireIconCache(t)
			}, ld.prototype.forEachFeatureAtCoordinate = function(t, e, i, r, o, n, s) {
				var a;
				if (this.getGL().isContextLost()) return !1;
				for (var h = e.viewState, l = e.layerStatesArray, u = l.length - 1; 0 <= u; --u) {
					var p = l[u],
						c = p.layer;
					if (Js(p, h.resolution) && n.call(s, c) && (a = this.getLayerRenderer(c)
							.forEachFeatureAtCoordinate(t, e, i, r))) return a
				}
			}, ld.prototype.hasFeatureAtCoordinate = function(t, e, i, r, o) {
				var n = !1;
				if (this.getGL().isContextLost()) return !1;
				for (var s = e.viewState, a = e.layerStatesArray, h = a.length - 1; 0 <= h; --h) {
					var l = a[h],
						u = l.layer;
					if (Js(l, s.resolution) && r.call(o, u) && (n = this.getLayerRenderer(u)
							.hasFeatureAtCoordinate(t, e))) return !0
				}
				return n
			}, ld.prototype.forEachLayerAtPixel = function(t, e, i, r, o, n, s) {
				if (this.getGL().isContextLost()) return !1;
				for (var a, h = e.viewState, l = e.layerStatesArray, u = l.length - 1; 0 <= u; --u) {
					var p = l[u],
						c = p.layer;
					if (Js(p, h.resolution) && n.call(o, c) && (a = this.getLayerRenderer(c)
							.forEachLayerAtPixel(t, e, r, o))) return a
				}
			}, ld),
			ad = ((rd = O) && (hd.__proto__ = rd), ((hd.prototype = Object.create(rd && rd.prototype))
				.constructor = hd).prototype.changed = function() {
				this.dispatchEvent(A.CHANGE)
			}, hd.prototype.getKey = function() {
				return this.key + "/" + this.tileCoord
			}, hd.prototype.getInterimTile = function() {
				if (!this.interimTile) return this;
				var t = this.interimTile;
				do {
					if (t.getState() == Bn.LOADED) return t
				} while (t = t.interimTile);
				return this
			}, hd.prototype.refreshInterimChain = function() {
				if (this.interimTile) {
					var t = this.interimTile,
						e = this;
					do {
						if (t.getState() == Bn.LOADED) {
							t.interimTile = null;
							break
						}
					} while (t.getState() != Bn.LOADING && t.getState() == Bn.IDLE ? e.interimTile = t
						.interimTile : e = t, t = e.interimTile)
				}
			}, hd.prototype.getTileCoord = function() {
				return this.tileCoord
			}, hd.prototype.getState = function() {
				return this.state
			}, hd.prototype.setState = function(t) {
				this.state = t, this.changed()
			}, hd.prototype.load = function() {}, hd.prototype.getAlpha = function(t, e) {
				if (!this.transition_) return 1;
				var i = this.transitionStarts_[t];
				if (i) {
					if (-1 === i) return 1
				} else i = e, this.transitionStarts_[t] = i;
				i = e - i + 1e3 / 60;
				return i >= this.transition_ ? 1 : ns(i / this.transition_)
			}, hd.prototype.inTransition = function(t) {
				return !!this.transition_ && -1 !== this.transitionStarts_[t]
			}, hd.prototype.endTransition = function(t) {
				this.transition_ && (this.transitionStarts_[t] = -1)
			}, hd);

		function hd(t, e, i) {
			rd.call(this);
			i = i || {};
			this.tileCoord = t, this.state = e, this.interimTile = null, this.key = "", this.transition_ =
				void 0 === i.transition ? 250 : i.transition, this.transitionStarts_ = {}
		}

		function ld(t) {
			od.call(this, t);
			t = t.getViewport();
			this.canvas_ = document.createElement("canvas"), this.canvas_.style.width = "100%", this.canvas_
				.style.height = "100%", this.canvas_.style.display = "block", this.canvas_.className = Ws, t
				.insertBefore(this.canvas_, t.childNodes[0] || null), this.clipTileCanvasWidth_ = 0, this
				.clipTileCanvasHeight_ = 0, this.clipTileContext_ = ds(), this.renderedVisible_ = !0, this
				.gl_ = Rp(this.canvas_, {
					antialias: !0,
					depth: !0,
					failIfMajorPerformanceCaveat: !0,
					preserveDrawingBuffer: !1,
					stencil: !0
				}), this.context_ = new uc(this.canvas_, this.gl_), E(this.canvas_, ec, this
					.handleWebGLContextLost, this), E(this.canvas_, ic, this.handleWebGLContextRestored,
					this), this.textureCache_ = new Kh, this.focus_ = null, this.tileTextureQueue_ = new Hn(
					function(t) {
						var e = t[1],
							i = t[2],
							t = e[0] - this.focus_[0],
							e = e[1] - this.focus_[1];
						return 65536 * Math.log(i) + Math.sqrt(t * t + e * e) / i
					}.bind(this),
					function(t) {
						return t[0].getKey()
					}), this.loadNextTileTexture_ = function(t, e) {
					var i, r, o;
					return this.tileTextureQueue_.isEmpty() || (this.tileTextureQueue_.reprioritize(), i = (
							o = this.tileTextureQueue_.dequeue())[0], r = o[3], o = o[4], this
						.bindTileTexture(i, r, o, 9729, 9729)), !1
				}.bind(this), this.textureCacheFrameMarkerCount_ = 0, this.initializeGL_()
		}

		function ud() {
			var t = ds(1, 1);
			return t.fillStyle = "rgba(0,0,0,0)", t.fillRect(0, 0, 1, 1), t.canvas
		}
		var pd, cd = ((pd = ad) && (dd.__proto__ = pd), ((dd.prototype = Object.create(pd && pd.prototype))
			.constructor = dd).prototype.disposeInternal = function() {
			this.state == Bn.LOADING && (this.unlistenImage_(), this.image_ = ud()), this
				.interimTile && this.interimTile.dispose(), this.state = Bn.ABORT, this.changed(),
				pd.prototype.disposeInternal.call(this)
		}, dd.prototype.getImage = function() {
			return this.image_
		}, dd.prototype.getKey = function() {
			return this.src_
		}, dd.prototype.handleImageError_ = function() {
			this.state = Bn.ERROR, this.unlistenImage_(), this.image_ = ud(), this.changed()
		}, dd.prototype.handleImageLoad_ = function() {
			var t = this.image_;
			t.naturalWidth && t.naturalHeight ? this.state = Bn.LOADED : this.state = Bn.EMPTY, this
				.unlistenImage_(), this.changed()
		}, dd.prototype.load = function() {
			this.state == Bn.ERROR && (this.state = Bn.IDLE, this.image_ = new Image, null !== this
					.crossOrigin_ && (this.image_.crossOrigin = this.crossOrigin_)), this.state ==
				Bn.IDLE && (this.state = Bn.LOADING, this.changed(), this.imageListenerKeys_ = [v(
					this.image_, A.ERROR, this.handleImageError_, this), v(this.image_, A
					.LOAD, this.handleImageLoad_, this)], this.tileLoadFunction_(this, this
					.src_))
		}, dd.prototype.unlistenImage_ = function() {
			this.imageListenerKeys_.forEach(S), this.imageListenerKeys_ = null
		}, dd);

		function dd(t, e, i, r, o, n) {
			pd.call(this, t, e, n), this.crossOrigin_ = r, this.src_ = i, this.image_ = new Image, null !==
				r && (this.image_.crossOrigin = r), this.imageListenerKeys_ = null, this.tileLoadFunction_ =
				o
		}

		function _d(t, e, i, r) {
			return void 0 !== r ? (r[0] = t, r[1] = e, r[2] = i, r) : [t, e, i]
		}

		function fd(t, e, i) {
			return t + "/" + e + "/" + i
		}

		function gd(t) {
			return fd(t[0], t[1], t[2])
		}

		function yd(t) {
			return (t[1] << t[0]) + t[2]
		}
		var md, vd = ((md = Kh) && (xd.__proto__ = md), ((xd.prototype = Object.create(md && md.prototype))
			.constructor = xd).prototype.expireCache = function(t) {
			for (; this.canExpireCache();) {
				var e = this.peekLast(),
					i = e.tileCoord[0].toString();
				if (i in t && t[i].contains(e.tileCoord)) break;
				this.pop().dispose()
			}
		}, xd.prototype.pruneExceptNewestZ = function() {
			var e;
			0 !== this.getCount() && (e = this.peekFirstKey().split("/").map(Number)[0], this
				.forEach(function(t) {
					t.tileCoord[0] !== e && (this.remove(gd(t.tileCoord)), t.dispose())
				}, this))
		}, xd);

		function xd(t) {
			md.call(this, t)
		}

		function Ed(e) {
			return e ? Array.isArray(e) ? function(t) {
				return e
			} : "function" == typeof e ? e : function(t) {
				return [e]
			} : null
		}
		var Sd, Cd = ((Sd = K) && (Rd.__proto__ = Sd), ((Rd.prototype = Object.create(Sd && Sd.prototype))
				.constructor = Rd).prototype.getAttributions = function() {
				return this.attributions_
			}, Rd.prototype.getAttributionsCollapsible = function() {
				return this.attributionsCollapsible_
			}, Rd.prototype.getProjection = function() {
				return this.projection_
			}, Rd.prototype.getResolutions = function() {
				return a()
			}, Rd.prototype.getState = function() {
				return this.state_
			}, Rd.prototype.getWrapX = function() {
				return this.wrapX_
			}, Rd.prototype.refresh = function() {
				this.changed()
			}, Rd.prototype.setAttributions = function(t) {
				this.attributions_ = Ed(t), this.changed()
			}, Rd.prototype.setState = function(t) {
				this.state_ = t, this.changed()
			}, Rd),
			wd = [0, 0, 0],
			Td = function(t) {
				var e, i, r;
				if (this.minZoom = void 0 !== t.minZoom ? t.minZoom : 0, this.resolutions_ = t.resolutions,
					$((i = this.resolutions_, r = function(t, e) {
						return e - t
					}, i.every(function(t, e) {
						if (0 === e) return !0;
						t = r(i[e - 1], t);
						return !(0 < t || 0 === t)
					})), 17), !t.origins)
					for (var o = 0, n = this.resolutions_.length - 1; o < n; ++o)
						if (e) {
							if (this.resolutions_[o] / this.resolutions_[o + 1] !== e) {
								e = void 0;
								break
							}
						} else e = this.resolutions_[o] / this.resolutions_[o + 1];
				this.zoomFactor_ = e, this.maxZoom = this.resolutions_.length - 1, this.origin_ = void 0 !==
					t.origin ? t.origin : null, this.origins_ = null, void 0 !== t.origins && (this
						.origins_ = t.origins, $(this.origins_.length == this.resolutions_.length, 20));
				var s = t.extent;
				void 0 === s || this.origin_ || this.origins_ || (this.origin_ = Ut(s)), $(!this.origin_ &&
						this.origins_ || this.origin_ && !this.origins_, 18), this.tileSizes_ = null,
					void 0 !== t.tileSizes && (this.tileSizes_ = t.tileSizes, $(this.tileSizes_.length ==
						this.resolutions_.length, 19)), this.tileSize_ = void 0 !== t.tileSize ? t
					.tileSize : this.tileSizes_ ? null : Jn, $(!this.tileSize_ && this.tileSizes_ || this
						.tileSize_ && !this.tileSizes_, 22), this.extent_ = void 0 !== s ? s : null, this
					.fullTileRanges_ = null, this.tmpSize_ = [0, 0], void 0 !== t.sizes ? this
					.fullTileRanges_ = t.sizes.map(function(t, e) {
						return new ql(Math.min(0, t[0]), Math.max(t[0] - 1, -1), Math.min(0, t[1]), Math
							.max(t[1] - 1, -1))
					}, this) : s && this.calculateTileRanges_(s)
			};

		function Rd(t) {
			Sd.call(this), this.projection_ = ke(t.projection), this.attributions_ = Ed(t.attributions),
				this.attributionsCollapsible_ = void 0 === t.attributionsCollapsible || t
				.attributionsCollapsible, this.loading = !1, this.state_ = void 0 !== t.state ? t.state :
				bs, this.wrapX_ = void 0 !== t.wrapX && t.wrapX
		}
		Td.prototype.forEachTileCoord = function(t, e, i) {
			for (var r = this.getTileRangeForExtentAndZ(t, e), o = r.minX, n = r.maxX; o <= n; ++o)
				for (var s = r.minY, a = r.maxY; s <= a; ++s) i([e, o, s])
		}, Td.prototype.forEachTileCoordParentTileRange = function(t, e, i, r, o) {
			var n, s, a, h = null,
				l = t[0] - 1;
			for (2 === this.zoomFactor_ ? (s = t[1], a = t[2]) : h = this.getTileCoordExtent(t, o); l >=
				this.minZoom;) {
				if (n = 2 === this.zoomFactor_ ? Hl(s = Math.floor(s / 2), s, a = Math.floor(a / 2), a,
						r) : this.getTileRangeForExtentAndZ(h, l, r), e.call(i, l, n)) return !0;
				--l
			}
			return !1
		}, Td.prototype.getExtent = function() {
			return this.extent_
		}, Td.prototype.getMaxZoom = function() {
			return this.maxZoom
		}, Td.prototype.getMinZoom = function() {
			return this.minZoom
		}, Td.prototype.getOrigin = function(t) {
			return this.origin_ || this.origins_[t]
		}, Td.prototype.getResolution = function(t) {
			return this.resolutions_[t]
		}, Td.prototype.getResolutions = function() {
			return this.resolutions_
		}, Td.prototype.getTileCoordChildTileRange = function(t, e, i) {
			if (t[0] < this.maxZoom) {
				if (2 === this.zoomFactor_) {
					var r = 2 * t[1],
						o = 2 * t[2];
					return Hl(r, 1 + r, o, 1 + o, e)
				}
				i = this.getTileCoordExtent(t, i);
				return this.getTileRangeForExtentAndZ(i, t[0] + 1, e)
			}
			return null
		}, Td.prototype.getTileRangeExtent = function(t, e, i) {
			var r = this.getOrigin(t),
				o = this.getResolution(t),
				n = Ds(this.getTileSize(t), this.tmpSize_),
				s = r[0] + e.minX * n[0] * o,
				t = r[0] + (e.maxX + 1) * n[0] * o;
			return wt(s, r[1] + e.minY * n[1] * o, t, r[1] + (e.maxY + 1) * n[1] * o, i)
		}, Td.prototype.getTileRangeForExtentAndZ = function(t, e, i) {
			var r = wd;
			this.getTileCoordForXYAndZ_(t[0], t[1], e, !1, r);
			var o = r[1],
				n = r[2];
			return this.getTileCoordForXYAndZ_(t[2], t[3], e, !0, r), Hl(o, r[1], n, r[2], i)
		}, Td.prototype.getTileCoordCenter = function(t) {
			var e = this.getOrigin(t[0]),
				i = this.getResolution(t[0]),
				r = Ds(this.getTileSize(t[0]), this.tmpSize_);
			return [e[0] + (t[1] + .5) * r[0] * i, e[1] + (t[2] + .5) * r[1] * i]
		}, Td.prototype.getTileCoordExtent = function(t, e) {
			var i = this.getOrigin(t[0]),
				r = this.getResolution(t[0]),
				o = Ds(this.getTileSize(t[0]), this.tmpSize_),
				n = i[0] + t[1] * o[0] * r,
				t = i[1] + t[2] * o[1] * r;
			return wt(n, t, n + o[0] * r, t + o[1] * r, e)
		}, Td.prototype.getTileCoordForCoordAndResolution = function(t, e, i) {
			return this.getTileCoordForXYAndResolution_(t[0], t[1], e, !1, i)
		}, Td.prototype.getTileCoordForXYAndResolution_ = function(t, e, i, r, o) {
			var n = this.getZForResolution(i),
				s = i / this.getResolution(n),
				a = this.getOrigin(n),
				h = Ds(this.getTileSize(n), this.tmpSize_),
				l = r ? .5 : 0,
				u = r ? 0 : .5,
				l = Math.floor((t - a[0]) / i + l),
				u = Math.floor((e - a[1]) / i + u),
				l = s * l / h[0],
				h = s * u / h[1],
				h = r ? (l = Math.ceil(l) - 1, Math.ceil(h) - 1) : (l = Math.floor(l), Math.floor(h));
			return _d(n, l, h, o)
		}, Td.prototype.getTileCoordForXYAndZ_ = function(t, e, i, r, o) {
			var n = this.getOrigin(i),
				s = this.getResolution(i),
				a = Ds(this.getTileSize(i), this.tmpSize_),
				h = r ? .5 : 0,
				l = r ? 0 : .5,
				h = Math.floor((t - n[0]) / s + h),
				l = Math.floor((e - n[1]) / s + l),
				h = h / a[0],
				a = l / a[1],
				a = r ? (h = Math.ceil(h) - 1, Math.ceil(a) - 1) : (h = Math.floor(h), Math.floor(a));
			return _d(i, h, a, o)
		}, Td.prototype.getTileCoordForCoordAndZ = function(t, e, i) {
			return this.getTileCoordForXYAndZ_(t[0], t[1], e, !1, i)
		}, Td.prototype.getTileCoordResolution = function(t) {
			return this.resolutions_[t[0]]
		}, Td.prototype.getTileSize = function(t) {
			return this.tileSize_ || this.tileSizes_[t]
		}, Td.prototype.getFullTileRange = function(t) {
			return this.fullTileRanges_ ? this.fullTileRanges_[t] : null
		}, Td.prototype.getZForResolution = function(t, e) {
			return Jt(nt(this.resolutions_, t, e || 0), this.minZoom, this.maxZoom)
		}, Td.prototype.calculateTileRanges_ = function(t) {
			for (var e = this.resolutions_.length, i = new Array(e), r = this.minZoom; r < e; ++r) i[
				r] = this.getTileRangeForExtentAndZ(t, r);
			this.fullTileRanges_ = i
		};
		var Id = Td;

		function Ld(t) {
			var e = t.getDefaultTileGrid();
			return e || (e = Md(t), t.setDefaultTileGrid(e)), e
		}

		function bd(t) {
			var e = t || {},
				t = e.extent || ke("EPSG:3857").getExtent(),
				e = {
					extent: t,
					minZoom: e.minZoom,
					tileSize: e.tileSize,
					resolutions: Pd(t, e.maxZoom, e.tileSize)
				};
			return new Id(e)
		}

		function Pd(t, e, i) {
			for (var r = void 0 !== e ? e : qn, e = kt(t), t = Bt(t), i = Ds(void 0 !== i ? i : Jn), o =
					Math.max(t / i[0], e / i[1]), n = r + 1, s = new Array(n), a = 0; a < n; ++a) s[a] = o /
				Math.pow(2, a);
			return s
		}

		function Md(t, e, i, r) {
			return t = Fd(t), e = e, i = i, r = void 0 !== (r = r) ? r : ut.TOP_LEFT, e = Pd(t, e, i),
				new Id({
					extent: t,
					origin: (r === ut.BOTTOM_LEFT ? o = At(t) : r === ut.BOTTOM_RIGHT ? o = Nt(t) :
						r === ut.TOP_LEFT ? o = Ut(t) : r === ut.TOP_RIGHT ? o = Yt(t) : $(!1, 13),
						o),
					resolutions: e,
					tileSize: i
				});
			var o
		}

		function Fd(t) {
			var e = (t = ke(t)).getExtent();
			return e || (e = wt(-(t = 180 * ue[pe.DEGREES] / t.getMetersPerUnit()), -t, t, t)), e
		}
		var Od, Ad, Nd, Gd = ((Nd = Cd) && (Vd.__proto__ = Nd), ((Vd.prototype = Object.create(Nd && Nd
				.prototype)).constructor = Vd).prototype.canExpireCache = function() {
				return this.tileCache.canExpireCache()
			}, Vd.prototype.expireCache = function(t, e) {
				t = this.getTileCacheForProjection(t);
				t && t.expireCache(e)
			}, Vd.prototype.forEachLoadedTile = function(t, e, i, r) {
				var o = this.getTileCacheForProjection(t);
				if (!o) return !1;
				for (var n, s, a, h = !0, l = i.minX; l <= i.maxX; ++l)
					for (var u = i.minY; u <= i.maxY; ++u) s = fd(e, l, u), a = !1, o.containsKey(s) &&
						(a = (n = o.get(s)).getState() === Bn.LOADED) && (a = !1 !== r(n)), a || (h = !
							1);
				return h
			}, Vd.prototype.getGutterForProjection = function(t) {
				return 0
			}, Vd.prototype.getKey = function() {
				return this.key_
			}, Vd.prototype.setKey = function(t) {
				this.key_ !== t && (this.key_ = t, this.changed())
			}, Vd.prototype.getOpaque = function(t) {
				return this.opaque_
			}, Vd.prototype.getResolutions = function() {
				return this.tileGrid.getResolutions()
			}, Vd.prototype.getTile = function(t, e, i, r, o) {
				return a()
			}, Vd.prototype.getTileGrid = function() {
				return this.tileGrid
			}, Vd.prototype.getTileGridForProjection = function(t) {
				return this.tileGrid || Ld(t)
			}, Vd.prototype.getTileCacheForProjection = function(t) {
				var e = this.getProjection();
				return e && !Xe(e, t) ? null : this.tileCache
			}, Vd.prototype.getTilePixelRatio = function(t) {
				return this.tilePixelRatio_
			}, Vd.prototype.getTilePixelSize = function(t, e, i) {
				i = this.getTileGridForProjection(i), e = this.getTilePixelRatio(e), t = Ds(i
					.getTileSize(t), this.tmpSize);
				return 1 == e ? t : Gs(t, e, this.tmpSize)
			}, Vd.prototype.getTileCoordForTileUrlFunction = function(n, t) {
				var e = void 0 !== t ? t : this.getProjection(),
					t = this.getTileGridForProjection(e);
				return this.getWrapX() && e.isGlobal() && (n = function(t, e, i) {
						var r = e[0],
							o = t.getTileCoordCenter(e),
							i = Fd(i);
						if (vt(i, o)) return e;
						e = Bt(i), i = Math.ceil((i[0] - o[0]) / e);
						return o[0] += e * i, t.getTileCoordForCoordAndZ(o, r)
					}(t, n, e)),
					function(t) {
						var e = n[0],
							i = n[1],
							r = n[2];
						if (!(t.getMinZoom() > e || e > t.getMaxZoom())) {
							var o = t.getExtent();
							return !(e = o ? t.getTileRangeForExtentAndZ(o, e) : t.getFullTileRange(
								e)) || e.containsXY(i, r)
						}
					}(t) ? n : null
			}, Vd.prototype.refresh = function() {
				this.tileCache.clear(), this.changed()
			}, Vd.prototype.useTile = function(t, e, i, r) {}, Vd),
			Dd = ((Ad = F) && (Xd.__proto__ = Ad), (Xd.prototype = Object.create(Ad && Ad.prototype))
				.constructor = Xd),
			kd = Gd,
			jd = new Fp(
				"precision mediump float;\nvarying vec2 v_texCoord;\n\n\nuniform sampler2D u_texture;\n\nvoid main(void) {\n  gl_FragColor = texture2D(u_texture, v_texCoord);\n}\n"
				),
			Ud = new Op(
				"varying vec2 v_texCoord;\n\n\nattribute vec2 a_position;\nattribute vec2 a_texCoord;\nuniform vec4 u_tileOffset;\n\nvoid main(void) {\n  gl_Position = vec4(a_position * u_tileOffset.xy + u_tileOffset.zw, 0., 1.);\n  v_texCoord = a_texCoord;\n}\n\n\n"
				),
			Yd = function(t, e) {
				this.u_tileOffset = t.getUniformLocation(e, "u_tileOffset"), this.u_texture = t
					.getUniformLocation(e, "u_texture"), this.a_position = t.getAttribLocation(e,
						"a_position"), this.a_texCoord = t.getAttribLocation(e, "a_texCoord")
			},
			Bd = ((Od = qc) && (zd.__proto__ = Od), ((zd.prototype = Object.create(Od && Od.prototype))
				.constructor = zd).prototype.disposeInternal = function() {
				this.mapRenderer.getContext().deleteBuffer(this.renderArrayBuffer_), Od.prototype
					.disposeInternal.call(this)
			}, zd.prototype.createLoadedTileFinder = function(e, r, o) {
				var n = this.mapRenderer;
				return function(i, t) {
					return e.forEachLoadedTile(r, i, t, function(t) {
						var e = n.isTileTextureLoaded(t);
						return e && (o[i] || (o[i] = {}), o[i][t.tileCoord.toString()] = t),
							e
					})
				}
			}, zd.prototype.handleWebGLContextLost = function() {
				Od.prototype.handleWebGLContextLost.call(this), this.locations_ = null
			}, zd.prototype.prepareFrame = function(t, e, i) {
				var r = this.mapRenderer,
					o = i.getGL(),
					n = t.viewState,
					s = n.projection,
					a = this.getLayer(),
					h = a.getSource();
				if (!(h instanceof kd)) return !0;
				var l = h.getTileGridForProjection(s),
					u = l.getZForResolution(n.resolution),
					p = l.getResolution(u),
					c = h.getTilePixelSize(u, t.pixelRatio, s),
					d = c[0] / Ds(l.getTileSize(u), this.tmpSize_)[0],
					_ = p / d,
					f = h.getTilePixelRatio(d) * h.getGutterForProjection(s),
					g = n.center,
					y = t.extent,
					m = l.getTileRangeForExtentAndZ(y, u);
				if (this.renderedTileRange_ && this.renderedTileRange_.equals(m) && this
					.renderedRevision_ == h.getRevision()) C = this.renderedFramebufferExtent_;
				else {
					var v = m.getSize(),
						x = ($(0 < (S = Math.max(v[0] * c[0], v[1] * c[1])), 29), Math.pow(2, Math.ceil(
							Math.log(S) / Math.LN2))),
						E = _ * x,
						v = l.getOrigin(u),
						S = v[0] + m.minX * c[0] * _,
						_ = v[1] + m.minY * c[1] * _,
						C = [S, _, S + E, _ + E];
					this.bindFramebuffer(t, x), o.viewport(0, 0, x, x), o.clearColor(0, 0, 0, 0), o
						.clear(16384), o.disable(3042);
					x = i.getProgram(this.fragmentShader_, this.vertexShader_);
					i.useProgram(x), this.locations_ || (this.locations_ = new Yd(o, x)), i.bindBuffer(
							34962, this.renderArrayBuffer_), o.enableVertexAttribArray(this.locations_
							.a_position), o.vertexAttribPointer(this.locations_.a_position, 2, 5126, !1,
							16, 0), o.enableVertexAttribArray(this.locations_.a_texCoord), o
						.vertexAttribPointer(this.locations_.a_texCoord, 2, 5126, !1, 16, 8), o
						.uniform1i(this.locations_.u_texture, 0);
					var w = {};
					w[u] = {};
					for (var T, R, I, L, b = this.createLoadedTileFinder(h, s, w), P = a
							.getUseInterimTilesOnError(), M = !0, F = [1 / 0, 1 / 0, -1 / 0, -1 / 0],
							O = new ql(0, 0, 0, 0), A = m.minX; A <= m.maxX; ++A)
						for (I = m.minY; I <= m.maxY; ++I)
							if (T = h.getTile(u, A, I, d, s), void 0 === e.extent || zt(L = l
									.getTileCoordExtent(T.tileCoord, F), e.extent)) {
								if ((R = T.getState()) == Bn.LOADED || R == Bn.EMPTY || R == Bn.ERROR &&
									!P || (T = T.getInterimTile()), (R = T.getState()) == Bn.LOADED) {
									if (r.isTileTextureLoaded(T)) {
										w[u][T.tileCoord.toString()] = T;
										continue
									}
								} else if (R == Bn.EMPTY || R == Bn.ERROR && !P) continue;
								M = !1, l.forEachTileCoordParentTileRange(T.tileCoord, b, null, O, F) ||
									(R = l.getTileCoordChildTileRange(T.tileCoord, O, F)) && b(u + 1, R)
							} var N = Object.keys(w).map(Number);
					N.sort(rt);
					for (var G = new Float32Array(4), D = 0, k = N.length; D < k; ++D) {
						var j, U = w[N[D]];
						for (j in U)(T = U[j]) instanceof cd && (L = l.getTileCoordExtent(T.tileCoord,
								F), G[0] = 2 * (L[2] - L[0]) / E, G[1] = 2 * (L[3] - L[1]) / E, G[
							2] = 2 * (L[0] - C[0]) / E - 1, G[3] = 2 * (L[1] - C[1]) / E - 1, o
							.uniform4fv(this.locations_.u_tileOffset, G), r.bindTileTexture(T, c,
								f * d, 9729, 9729), o.drawArrays(5, 0, 4))
					}
					M ? (this.renderedTileRange_ = m, this.renderedFramebufferExtent_ = C, this
						.renderedRevision_ = h.getRevision()) : (this.renderedTileRange_ = null,
						this.renderedFramebufferExtent_ = null, this.renderedRevision_ = -1, t
						.animate = !0)
				}
				this.updateUsedTiles(t.usedTiles, h, u, m);
				var Y = r.getTileTextureQueue();
				this.manageTilePyramid(t, h, l, d, s, y, u, a.getPreload(), function(t) {
					t.getState() != Bn.LOADED || r.isTileTextureLoaded(t) || Y.isKeyQueued(t
						.getKey()) || Y.enqueue([t, l.getTileCoordCenter(t.tileCoord), l
						.getResolution(t.tileCoord[0]), c, f * d
					])
				}, this), this.scheduleExpireCache(t, h);
				a = this.texCoordMatrix;
				return qe(a), ri(a, (Math.round(g[0] / p) * p - C[0]) / (C[2] - C[0]), (Math.round(g[
					1] / p) * p - C[1]) / (C[3] - C[1])), 0 !== n.rotation && ei(a, n.rotation), ii(
					a, t.size[0] * n.resolution / (C[2] - C[0]), t.size[1] * n.resolution / (C[3] -
						C[1])), ri(a, -.5, -.5), !0
			}, zd.prototype.forEachLayerAtPixel = function(t, e, i, r) {
				if (this.framebuffer) {
					var o = [t[0] / e.size[0], (e.size[1] - t[1]) / e.size[1]],
						t = ti(this.texCoordMatrix, o.slice()),
						e = [t[0] * this.framebufferDimension, t[1] * this.framebufferDimension],
						o = this.mapRenderer.getContext().getGL();
					o.bindFramebuffer(o.FRAMEBUFFER, this.framebuffer);
					t = new Uint8Array(4);
					return o.readPixels(e[0], e[1], 1, 1, o.RGBA, o.UNSIGNED_BYTE, t), 0 < t[3] ? i
						.call(r, this.getLayer(), t) : void 0
				}
			}, zd);

		function zd(t, e) {
			Od.call(this, t, e), this.fragmentShader_ = jd, this.vertexShader_ = Ud, this.locations_ = null,
				this.renderArrayBuffer_ = new qp([0, 0, 0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0]), this
				.renderedTileRange_ = null, this.renderedFramebufferExtent_ = null, this
				.renderedRevision_ = -1, this.tmpSize_ = [0, 0]
		}

		function Xd(t, e) {
			Ad.call(this, t), this.tile = e
		}

		function Vd(t) {
			Nd.call(this, {
					attributions: t.attributions,
					attributionsCollapsible: t.attributionsCollapsible,
					projection: t.projection,
					state: t.state,
					wrapX: t.wrapX
				}), this.opaque_ = void 0 !== t.opaque && t.opaque, this.tilePixelRatio_ = void 0 !== t
				.tilePixelRatio ? t.tilePixelRatio : 1, this.tileGrid = void 0 !== t.tileGrid ? t.tileGrid :
				null, this.tileCache = new vd(t.cacheSize), this.tmpSize = [0, 0], this.key_ = t.key || "",
				this.tileOptions = {
					transition: t.transition
				}
		}
		Bd.handles = function(t) {
			return t.getType() === zh.TILE
		}, Bd.create = function(t, e) {
			return new Bd(t, e)
		};
		var Wd, Kd = Bd,
			Hd = ((Wd = qc) && (Zd.__proto__ = Wd), ((Zd.prototype = Object.create(Wd && Wd.prototype))
				.constructor = Zd).prototype.composeFrame = function(t, e, i) {
				this.layerState_ = e;
				var r = t.viewState,
					o = this.replayGroup_,
					n = t.size,
					s = t.pixelRatio,
					a = this.mapRenderer.getGL();
				o && !o.isEmpty() && (a.enable(a.SCISSOR_TEST), a.scissor(0, 0, n[0] * s, n[1] * s), o
					.replay(i, r.center, r.resolution, r.rotation, n, s, e.opacity, e.managed ? t
						.skippedFeatureUids : {}), a.disable(a.SCISSOR_TEST))
			}, Zd.prototype.disposeInternal = function() {
				var t, e = this.replayGroup_;
				e && (t = this.mapRenderer.getContext(), e.getDeleteResourcesFunction(t)(), this
					.replayGroup_ = null), Wd.prototype.disposeInternal.call(this)
			}, Zd.prototype.forEachFeatureAtCoordinate = function(t, e, i, r, o) {
				if (this.replayGroup_ && this.layerState_) {
					var n = this.mapRenderer.getContext(),
						s = e.viewState,
						a = this.getLayer(),
						h = this.layerState_,
						l = {};
					return this.replayGroup_.forEachFeatureAtCoordinate(t, n, s.center, s.resolution, s
						.rotation, e.size, e.pixelRatio, h.opacity, {},
						function(t) {
							var e = ct(t);
							if (!(e in l)) return l[e] = !0, r.call(o, t, a)
						})
				}
			}, Zd.prototype.hasFeatureAtCoordinate = function(t, e) {
				if (this.replayGroup_ && this.layerState_) {
					var i = this.mapRenderer.getContext(),
						r = e.viewState,
						o = this.layerState_;
					return this.replayGroup_.hasFeatureAtCoordinate(t, i, r.center, r.resolution, r
						.rotation, e.size, e.pixelRatio, o.opacity, e.skippedFeatureUids)
				}
				return !1
			}, Zd.prototype.forEachLayerAtPixel = function(t, e, i, r) {
				t = ti(e.pixelToCoordinateTransform, t.slice());
				return this.hasFeatureAtCoordinate(t, e) ? i.call(r, this.getLayer(), null) : void 0
			}, Zd.prototype.handleStyleImageChange_ = function(t) {
				this.renderIfReadyAndVisible()
			}, Zd.prototype.prepareFrame = function(t, e, i) {
				var r = this.getLayer(),
					o = r.getSource(),
					n = t.viewHints[0],
					s = t.viewHints[1],
					a = r.getUpdateWhileAnimating(),
					h = r.getUpdateWhileInteracting();
				if (!this.dirty_ && !a && n || !h && s) return !0;
				var l = t.extent,
					a = t.viewState,
					n = a.projection,
					u = a.resolution,
					p = t.pixelRatio,
					h = r.getRevision(),
					s = r.getRenderBuffer(),
					a = r.getRenderOrder();
				void 0 === a && (a = ku);
				s = gt(l, s * u);
				if (!this.dirty_ && this.renderedResolution_ == u && this.renderedRevision_ == h && this
					.renderedRenderOrder_ == a && xt(this.renderedExtent_, s)) return !0;
				this.replayGroup_ && t.postRenderFunctions.push(this.replayGroup_
					.getDeleteResourcesFunction(i)), this.dirty_ = !1;
				var c = new Vc(Gu * u / p, s, r.getRenderBuffer());
				o.loadFeatures(s, u, n);
				var d, n = function(t) {
					var e, i = t.getStyleFunction() || r.getStyleFunction();
					i && (e = i(t, u)), e && (e = this.renderFeature(t, u, p, e, c), this.dirty_ =
						this.dirty_ || e)
				}.bind(this);
				return a ? (d = [], o.forEachFeatureInExtent(s, function(t) {
						d.push(t)
					}), d.sort(a), d.forEach(n.bind(this))) : o.forEachFeatureInExtent(s, n), c.finish(
						i), this.renderedResolution_ = u, this.renderedRevision_ = h, this
					.renderedRenderOrder_ = a, this.renderedExtent_ = s, this.replayGroup_ = c, !0
			}, Zd.prototype.renderFeature = function(t, e, i, r, o) {
				if (!r) return !1;
				var n = !1;
				if (Array.isArray(r))
					for (var s = r.length - 1; 0 <= s; --s) n = Uu(o, t, r[s], ju(e, i), this
						.handleStyleImageChange_, this) || n;
				else n = Uu(o, t, r, ju(e, i), this.handleStyleImageChange_, this) || n;
				return n
			}, Zd);

		function Zd(t, e) {
			Wd.call(this, t, e), this.dirty_ = !1, this.renderedRevision_ = -1, this.renderedResolution_ =
				NaN, this.renderedExtent_ = [1 / 0, 1 / 0, -1 / 0, -1 / 0], this.renderedRenderOrder_ =
				null, this.replayGroup_ = null, this.layerState_ = null
		}
		Hd.handles = function(t) {
			return t.getType() === zh.VECTOR
		}, Hd.create = function(t, e) {
			return new Hd(t, e)
		};
		var qd, Jd = Hd,
			Qd = ((qd = js) && (t_.__proto__ = qd), ((t_.prototype = Object.create(qd && qd.prototype))
				.constructor = t_).prototype.createRenderer = function() {
				var t = new sd(this);
				return t.registerLayerRenderers([nd, Kd, Jd]), t
			}, t_),
			$d = {
				ARRAY_BUFFER: "arraybuffer",
				JSON: "json",
				TEXT: "text",
				XML: "xml"
			};

		function t_(t) {
			(t = y({}, t)).controls || (t.controls = ca()), t.interactions || (t.interactions = Ih()), qd
				.call(this, t)
		}

		function e_(i, n, s, a) {
			return function(t, e, r) {
				var o = new XMLHttpRequest;
				o.open("GET", "function" == typeof i ? i(t, e, r) : i, !0), n.getType() == $d
					.ARRAY_BUFFER && (o.responseType = "arraybuffer"), o.onload = function(t) {
						var e, i;
						!o.status || 200 <= o.status && o.status < 300 ? ((i = n.getType()) == $d
							.JSON || i == $d.TEXT ? e = o.responseText : i == $d.XML ? (e = o
								.responseXML) || (e = (new DOMParser).parseFromString(o
								.responseText, "application/xml")) : i == $d.ARRAY_BUFFER && (e = o
								.response), e ? s.call(this, n.readFeatures(e, {
								featureProjection: r
							}), n.readProjection(e), n.getLastExtent()) : a.call(this)) : a.call(
							this)
					}.bind(this), o.onerror = function() {
						a.call(this)
					}.bind(this), o.send()
			}
		}

		function i_(t, e) {
			return e_(t, e, function(t, e) {
				"function" == typeof this.addFeatures && this.addFeatures(t)
			}, L)
		}

		function r_(t, e) {
			return [
				[-1 / 0, -1 / 0, 1 / 0, 1 / 0]
			]
		}
		var o_ = document.implementation.createDocument("", "", null),
			n_ = "http://www.w3.org/2001/XMLSchema-instance";

		function s_(t, e) {
			return o_.createElementNS(t, e)
		}

		function a_(o, t) {
			return function o(t, e, i) {
				if (t.nodeType == Node.CDATA_SECTION_NODE || t.nodeType == Node.TEXT_NODE) e ? i.push(
					String(t.nodeValue).replace(/(\r\n|\r|\n)/g, "")) : i.push(t.nodeValue);
				else
					for (var r = t.firstChild; r; r = r.nextSibling) o(r, e, i);
				return i
			}(o, t, []).join("")
		}

		function h_(t) {
			return "documentElement" in t
		}

		function l_(t) {
			return (new DOMParser).parseFromString(t, "application/xml")
		}

		function u_(i, r) {
			return function(t, e) {
				t = i.call(void 0 !== r ? r : this, t, e);
				void 0 !== t && st(e[e.length - 1], t)
			}
		}

		function p_(i, r) {
			return function(t, e) {
				t = i.call(void 0 !== r ? r : this, t, e);
				void 0 !== t && e[e.length - 1].push(t)
			}
		}

		function c_(i, r) {
			return function(t, e) {
				t = i.call(void 0 !== r ? r : this, t, e);
				void 0 !== t && (e[e.length - 1] = t)
			}
		}

		function d_(r, o, n) {
			return function(t, e) {
				var i = r.call(void 0 !== n ? n : this, t, e);
				void 0 !== i && (e = e[e.length - 1], ((t = void 0 !== o ? o : t.localName) in e ? e[
					t] : e[t] = []).push(i))
			}
		}

		function __(r, o, n) {
			return function(t, e) {
				var i = r.call(void 0 !== n ? n : this, t, e);
				void 0 !== i && (e[e.length - 1][void 0 !== o ? o : t.localName] = i)
			}
		}

		function f_(r, o) {
			return function(t, e, i) {
				r.call(void 0 !== o ? o : this, t, e, i), i[i.length - 1].node.appendChild(t)
			}
		}

		function g_(o) {
			var n, s;
			return function(t, e, i) {
				var r;
				void 0 === n && (n = {}, (r = {})[t.localName] = o, n[t.namespaceURI] = r, s = y_(t
					.localName)), C_(n, s, e, i)
			}
		}

		function y_(t, o) {
			var n = t;
			return function(t, e, i) {
				var r = e[e.length - 1].node,
					e = n;
				return void 0 === e && (e = i), s_(void 0 !== o ? o : r.namespaceURI, e)
			}
		}
		var m_ = y_();

		function v_(t, e) {
			for (var i = e.length, r = new Array(i), o = 0; o < i; ++o) r[o] = t[e[o]];
			return r
		}

		function x_(t, e, i) {
			for (var r = void 0 !== i ? i : {}, o = 0, n = t.length; o < n; ++o) r[t[o]] = e;
			return r
		}

		function E_(t, e, i, r) {
			for (var o = e.firstElementChild; o; o = o.nextElementSibling) {
				var n = t[o.namespaceURI];
				void 0 === n || void 0 !== (n = n[o.localName]) && n.call(r, o, i)
			}
		}

		function S_(t, e, i, r, o) {
			return r.push(t), E_(e, i, r, o), r.pop()
		}

		function C_(t, e, i, r, o, n) {
			for (var s, a, h = (void 0 !== o ? o : i).length, l = 0; l < h; ++l) void 0 !== (s = i[l]) &&
				void 0 !== (a = e.call(void 0 !== n ? n : this, s, r, void 0 !== o ? o[l] : void 0)) && t[a
					.namespaceURI][a.localName].call(n, a, s, r)
		}

		function w_(t, e, i, r, o, n, s) {
			return o.push(t), C_(e, i, r, o, n, s), o.pop()
		}
		var T_, R_ = ((T_ = Id) && (L_.__proto__ = T_), ((L_.prototype = Object.create(T_ && T_.prototype))
				.constructor = L_).prototype.getMatrixId = function(t) {
				return this.matrixIds_[t]
			}, L_.prototype.getMatrixIds = function() {
				return this.matrixIds_
			}, L_),
			I_ = R_;

		function L_(t) {
			T_.call(this, {
				extent: t.extent,
				origin: t.origin,
				origins: t.origins,
				resolutions: t.resolutions,
				tileSize: t.tileSize,
				tileSizes: t.tileSizes,
				sizes: t.sizes
			}), this.matrixIds_ = t.matrixIds
		}

		function b_(o, t, e) {
			var n = [],
				s = [],
				a = [],
				h = [],
				l = [],
				u = void 0 !== e ? e : [],
				e = o.SupportedCRS,
				e = ke(e.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/, "$1:$3")) || ke(e),
				p = e.getMetersPerUnit(),
				c = "ne" == e.getAxisOrientation().substr(0, 2);
			return o.TileMatrix.sort(function(t, e) {
				return e.ScaleDenominator - t.ScaleDenominator
			}), o.TileMatrix.forEach(function(e) {
				var t, i, r;
				0 < u.length && !at(u, function(t) {
					return e.Identifier == t.TileMatrix || -1 === e.Identifier.indexOf(
						":") && o.Identifier + ":" + e.Identifier === t.TileMatrix
				}) || (s.push(e.Identifier), t = 28e-5 * e.ScaleDenominator / p, i = e
					.TileWidth, r = e.TileHeight, c ? a.push([e.TopLeftCorner[1], e
						.TopLeftCorner[0]
					]) : a.push(e.TopLeftCorner), n.push(t), h.push(i == r ? i : [i, r]), l
					.push([e.MatrixWidth, -e.MatrixHeight]))
			}), new R_({
				extent: t,
				origins: a,
				resolutions: n,
				matrixIds: s,
				tileSizes: h,
				sizes: l
			})
		}
		var P_ = function(t) {
			this.opacity_ = t.opacity, this.rotateWithView_ = t.rotateWithView, this.rotation_ = t
				.rotation, this.scale_ = t.scale
		};
		P_.prototype.clone = function() {
			return new P_({
				opacity: this.getOpacity(),
				scale: this.getScale(),
				rotation: this.getRotation(),
				rotateWithView: this.getRotateWithView()
			})
		}, P_.prototype.getOpacity = function() {
			return this.opacity_
		}, P_.prototype.getRotateWithView = function() {
			return this.rotateWithView_
		}, P_.prototype.getRotation = function() {
			return this.rotation_
		}, P_.prototype.getScale = function() {
			return this.scale_
		}, P_.prototype.getSnapToPixel = function() {
			return !1
		}, P_.prototype.getAnchor = function() {
			return a()
		}, P_.prototype.getImage = function(t) {
			return a()
		}, P_.prototype.getHitDetectionImage = function(t) {
			return a()
		}, P_.prototype.getImageState = function() {
			return a()
		}, P_.prototype.getImageSize = function() {
			return a()
		}, P_.prototype.getHitDetectionImageSize = function() {
			return a()
		}, P_.prototype.getOrigin = function() {
			return a()
		}, P_.prototype.getSize = function() {
			return a()
		}, P_.prototype.setOpacity = function(t) {
			this.opacity_ = t
		}, P_.prototype.setRotateWithView = function(t) {
			this.rotateWithView_ = t
		}, P_.prototype.setRotation = function(t) {
			this.rotation_ = t
		}, P_.prototype.setScale = function(t) {
			this.scale_ = t
		}, P_.prototype.setSnapToPixel = function(t) {}, P_.prototype.listenImageChange = function(t,
		e) {
			return a()
		}, P_.prototype.load = function() {
			a()
		}, P_.prototype.unlistenImageChange = function(t, e) {
			a()
		};
		var M_, F_, O_, A_ = P_,
			N_ = ((O_ = A_) && (B_.__proto__ = O_), ((B_.prototype = Object.create(O_ && O_.prototype))
					.constructor = B_).prototype.clone = function() {
					var t = new B_({
						fill: this.getFill() ? this.getFill().clone() : void 0,
						points: this.getPoints(),
						radius: this.getRadius(),
						radius2: this.getRadius2(),
						angle: this.getAngle(),
						stroke: this.getStroke() ? this.getStroke().clone() : void 0,
						rotation: this.getRotation(),
						rotateWithView: this.getRotateWithView(),
						atlasManager: this.atlasManager_
					});
					return t.setOpacity(this.getOpacity()), t.setScale(this.getScale()), t
				}, B_.prototype.getAnchor = function() {
					return this.anchor_
				}, B_.prototype.getAngle = function() {
					return this.angle_
				}, B_.prototype.getFill = function() {
					return this.fill_
				}, B_.prototype.getHitDetectionImage = function(t) {
					return this.hitDetectionCanvas_
				}, B_.prototype.getImage = function(t) {
					return this.canvas_
				}, B_.prototype.getImageSize = function() {
					return this.imageSize_
				}, B_.prototype.getHitDetectionImageSize = function() {
					return this.hitDetectionImageSize_
				}, B_.prototype.getImageState = function() {
					return Yh.LOADED
				}, B_.prototype.getOrigin = function() {
					return this.origin_
				}, B_.prototype.getPoints = function() {
					return this.points_
				}, B_.prototype.getRadius = function() {
					return this.radius_
				}, B_.prototype.getRadius2 = function() {
					return this.radius2_
				}, B_.prototype.getSize = function() {
					return this.size_
				}, B_.prototype.getStroke = function() {
					return this.stroke_
				}, B_.prototype.listenImageChange = function(t, e) {}, B_.prototype.load = function() {}, B_
				.prototype.unlistenImageChange = function(t, e) {}, B_.prototype.render_ = function(t) {
					var e, i, r = "",
						o = "",
						n = 0,
						s = null,
						a = 0,
						h = 0;
					this.stroke_ && (null === (i = this.stroke_.getColor()) && (i = qh), i = gl(i),
						void 0 === (h = this.stroke_.getWidth()) && (h = 1), s = this.stroke_
						.getLineDash(), a = this.stroke_.getLineDashOffset(), lr || (s = null, a = 0),
						void 0 === (o = this.stroke_.getLineJoin()) && (o = "round"), void 0 === (r =
							this.stroke_.getLineCap()) && (r = "round"), void 0 === (n = this.stroke_
							.getMiterLimit()) && (n = 10));
					var l, u, p = 2 * (this.radius_ + h) + 1,
						o = {
							strokeStyle: i,
							strokeWidth: h,
							size: p,
							lineCap: r,
							lineDash: s,
							lineDashOffset: a,
							lineJoin: o,
							miterLimit: n
						};
					void 0 === t ? (l = ds(p, p), this.canvas_ = l.canvas, e = p = this.canvas_.width, this
						.draw_(o, l, 0, 0), this.createHitDetectionCanvas_(o)) : (p = Math.round(p), (
							n = !this.fill_) && (u = this.drawHitDetectionCanvas_.bind(this, o)), l =
						this.getChecksum(), u = t.add(l, p, p, this.draw_.bind(this, o), u), this
						.canvas_ = u.image, this.origin_ = [u.offsetX, u.offsetY], e = u.image.width,
						n ? (this.hitDetectionCanvas_ = u.hitImage, this.hitDetectionImageSize_ = [u
							.hitImage.width, u.hitImage.height
						]) : (this.hitDetectionCanvas_ = this.canvas_, this.hitDetectionImageSize_ = [e,
							e
						])), this.anchor_ = [p / 2, p / 2], this.size_ = [p, p], this.imageSize_ = [e,
						e]
				}, B_.prototype.draw_ = function(t, e, i, r) {
					var o, n, s;
					e.setTransform(1, 0, 0, 1, 0, 0), e.translate(i, r), e.beginPath();
					var a = this.points_;
					if (a === 1 / 0) e.arc(t.size / 2, t.size / 2, this.radius_, 0, 2 * Math.PI, !0);
					else {
						var h = void 0 !== this.radius2_ ? this.radius2_ : this.radius_;
						for (h !== this.radius_ && (a *= 2), o = 0; o <= a; o++) n = 2 * o * Math.PI / a -
							Math.PI / 2 + this.angle_, s = o % 2 == 0 ? this.radius_ : h, e.lineTo(t.size /
								2 + s * Math.cos(n), t.size / 2 + s * Math.sin(n))
					}
					this.fill_ && (null === (r = this.fill_.getColor()) && (r = Hh), e.fillStyle = gl(r), e
						.fill()), this.stroke_ && (e.strokeStyle = t.strokeStyle, e.lineWidth = t
						.strokeWidth, t.lineDash && (e.setLineDash(t.lineDash), e.lineDashOffset = t
							.lineDashOffset), e.lineCap = t.lineCap, e.lineJoin = t.lineJoin, e
						.miterLimit = t.miterLimit, e.stroke()), e.closePath()
				}, B_.prototype.createHitDetectionCanvas_ = function(t) {
					var e;
					this.hitDetectionImageSize_ = [t.size, t.size], this.fill_ ? this.hitDetectionCanvas_ =
						this.canvas_ : (e = ds(t.size, t.size), this.hitDetectionCanvas_ = e.canvas, this
							.drawHitDetectionCanvas_(t, e, 0, 0))
				}, B_.prototype.drawHitDetectionCanvas_ = function(t, e, i, r) {
					e.setTransform(1, 0, 0, 1, 0, 0), e.translate(i, r), e.beginPath();
					var o = this.points_;
					if (o === 1 / 0) e.arc(t.size / 2, t.size / 2, this.radius_, 0, 2 * Math.PI, !0);
					else {
						var n, s, a, h = void 0 !== this.radius2_ ? this.radius2_ : this.radius_;
						for (h !== this.radius_ && (o *= 2), n = 0; n <= o; n++) a = 2 * n * Math.PI / o -
							Math.PI / 2 + this.angle_, s = n % 2 == 0 ? this.radius_ : h, e.lineTo(t.size /
								2 + s * Math.cos(a), t.size / 2 + s * Math.sin(a))
					}
					e.fillStyle = to(Hh), e.fill(), this.stroke_ && (e.strokeStyle = t.strokeStyle, e
						.lineWidth = t.strokeWidth, t.lineDash && (e.setLineDash(t.lineDash), e
							.lineDashOffset = t.lineDashOffset), e.stroke()), e.closePath()
				}, B_.prototype.getChecksum = function() {
					var t, e = this.stroke_ ? this.stroke_.getChecksum() : "-",
						i = this.fill_ ? this.fill_.getChecksum() : "-";
					return this.checksums_ && e == this.checksums_[1] && i == this.checksums_[2] && this
						.radius_ == this.checksums_[3] && this.radius2_ == this.checksums_[4] && this
						.angle_ == this.checksums_[5] && this.points_ == this.checksums_[6] || (t = "r" +
							e + i + (void 0 !== this.radius_ ? this.radius_.toString() : "-") + (void 0 !==
								this.radius2_ ? this.radius2_.toString() : "-") + (void 0 !== this.angle_ ?
								this.angle_.toString() : "-") + (void 0 !== this.points_ ? this.points_
								.toString() : "-"), this.checksums_ = [t, e, i, this.radius_, this.radius2_,
								this.angle_, this.points_
							]), this.checksums_[0]
				}, B_),
			G_ = ((F_ = N_) && (Y_.__proto__ = F_), ((Y_.prototype = Object.create(F_ && F_.prototype))
				.constructor = Y_).prototype.clone = function() {
				var t = new Y_({
					fill: this.getFill() ? this.getFill().clone() : void 0,
					stroke: this.getStroke() ? this.getStroke().clone() : void 0,
					radius: this.getRadius(),
					atlasManager: this.atlasManager_
				});
				return t.setOpacity(this.getOpacity()), t.setScale(this.getScale()), t
			}, Y_.prototype.setRadius = function(t) {
				this.radius_ = t, this.render_(this.atlasManager_)
			}, Y_),
			D_ = "fraction",
			k_ = "pixels",
			j_ = ((M_ = O) && (U_.__proto__ = M_), ((U_.prototype = Object.create(M_ && M_.prototype))
				.constructor = U_).prototype.isTainted_ = function() {
				if (void 0 === this.tainted_ && this.imageState_ === Yh.LOADED) {
					this.tainted_ = !1;
					var t = ds(1, 1);
					try {
						t.drawImage(this.image_, 0, 0), t.getImageData(0, 0, 1, 1)
					} catch (t) {
						this.tainted_ = !0
					}
				}
				return !0 === this.tainted_
			}, U_.prototype.dispatchChangeEvent_ = function() {
				this.dispatchEvent(A.CHANGE)
			}, U_.prototype.handleImageError_ = function() {
				this.imageState_ = Yh.ERROR, this.unlistenImage_(), this.dispatchChangeEvent_()
			}, U_.prototype.handleImageLoad_ = function() {
				this.imageState_ = Yh.LOADED, this.size_ && (this.image_.width = this.size_[0], this
					.image_.height = this.size_[1]), this.size_ = [this.image_.width, this.image_
					.height
				], this.unlistenImage_(), this.replaceColor_(), this.dispatchChangeEvent_()
			}, U_.prototype.getImage = function(t) {
				return this.canvas_ || this.image_
			}, U_.prototype.getImageState = function() {
				return this.imageState_
			}, U_.prototype.getHitDetectionImage = function(t) {
				var e, i, r;
				return this.hitDetectionImage_ || (this.isTainted_() ? ((r = ds(e = this.size_[0], i =
						this.size_[1])).fillRect(0, 0, e, i), this.hitDetectionImage_ = r
					.canvas) : this.hitDetectionImage_ = this.image_), this.hitDetectionImage_
			}, U_.prototype.getSize = function() {
				return this.size_
			}, U_.prototype.getSrc = function() {
				return this.src_
			}, U_.prototype.load = function() {
				if (this.imageState_ == Yh.IDLE) {
					this.imageState_ = Yh.LOADING, this.imageListenerKeys_ = [v(this.image_, A.ERROR,
						this.handleImageError_, this), v(this.image_, A.LOAD, this
						.handleImageLoad_, this)];
					try {
						this.image_.src = this.src_
					} catch (M_) {
						this.handleImageError_()
					}
				}
			}, U_.prototype.replaceColor_ = function() {
				if (this.color_ && !this.isTainted_()) {
					this.canvas_.width = this.image_.width, this.canvas_.height = this.image_.height;
					var t = this.canvas_.getContext("2d");
					t.drawImage(this.image_, 0, 0);
					for (var e = t.getImageData(0, 0, this.image_.width, this.image_.height), i = e
							.data, r = this.color_[0] / 255, o = this.color_[1] / 255, n = this.color_[
								2] / 255, s = 0, a = i.length; s < a; s += 4) i[s] *= r, i[s + 1] *= o,
						i[s + 2] *= n;
					t.putImageData(e, 0, 0)
				}
			}, U_.prototype.unlistenImage_ = function() {
				this.imageListenerKeys_.forEach(S), this.imageListenerKeys_ = null
			}, U_);

		function U_(t, e, i, r, o, n) {
			M_.call(this), this.hitDetectionImage_ = null, this.image_ = t || new Image, null !== r && (this
					.image_.crossOrigin = r), this.canvas_ = n ? document.createElement("canvas") : null,
				this.color_ = n, this.imageListenerKeys_ = null, this.imageState_ = o, this.size_ = i, this
				.src_ = e, this.tainted_
		}

		function Y_(t) {
			t = t || {};
			F_.call(this, {
				points: 1 / 0,
				fill: t.fill,
				radius: t.radius,
				stroke: t.stroke,
				atlasManager: t.atlasManager
			})
		}

		function B_(t) {
			var e = void 0 !== t.rotateWithView && t.rotateWithView;
			O_.call(this, {
					opacity: 1,
					rotateWithView: e,
					rotation: void 0 !== t.rotation ? t.rotation : 0,
					scale: 1
				}), this.checksums_ = null, this.canvas_ = null, this.hitDetectionCanvas_ = null, this
				.fill_ = void 0 !== t.fill ? t.fill : null, this.origin_ = [0, 0], this.points_ = t.points,
				this.radius_ = void 0 !== t.radius ? t.radius : t.radius1, this.radius2_ = t.radius2, this
				.angle_ = void 0 !== t.angle ? t.angle : 0, this.stroke_ = void 0 !== t.stroke ? t.stroke :
				null, this.anchor_ = null, this.size_ = null, this.imageSize_ = null, this
				.hitDetectionImageSize_ = null, this.atlasManager_ = t.atlasManager, this.render_(this
					.atlasManager_)
		}
		var z_, X_ = "bottom-left",
			V_ = "bottom-right",
			W_ = "top-left",
			K_ = "top-right",
			H_ = ((z_ = A_) && (q_.__proto__ = z_), ((q_.prototype = Object.create(z_ && z_.prototype))
				.constructor = q_).prototype.clone = function() {
				return new q_({
					anchor: this.anchor_.slice(),
					anchorOrigin: this.anchorOrigin_,
					anchorXUnits: this.anchorXUnits_,
					anchorYUnits: this.anchorYUnits_,
					crossOrigin: this.crossOrigin_,
					color: this.color_ && this.color_.slice ? this.color_.slice() : this
						.color_ || void 0,
					src: this.getSrc(),
					offset: this.offset_.slice(),
					offsetOrigin: this.offsetOrigin_,
					size: null !== this.size_ ? this.size_.slice() : void 0,
					opacity: this.getOpacity(),
					scale: this.getScale(),
					rotation: this.getRotation(),
					rotateWithView: this.getRotateWithView()
				})
			}, q_.prototype.getAnchor = function() {
				if (this.normalizedAnchor_) return this.normalizedAnchor_;
				var t = this.anchor_,
					e = this.getSize();
				if (this.anchorXUnits_ == D_ || this.anchorYUnits_ == D_) {
					if (!e) return null;
					t = this.anchor_.slice(), this.anchorXUnits_ == D_ && (t[0] *= e[0]), this
						.anchorYUnits_ == D_ && (t[1] *= e[1])
				}
				if (this.anchorOrigin_ != W_) {
					if (!e) return null;
					t === this.anchor_ && (t = this.anchor_.slice()), this.anchorOrigin_ != K_ && this
						.anchorOrigin_ != V_ || (t[0] = -t[0] + e[0]), this.anchorOrigin_ != X_ && this
						.anchorOrigin_ != V_ || (t[1] = -t[1] + e[1])
				}
				return this.normalizedAnchor_ = t, this.normalizedAnchor_
			}, q_.prototype.setAnchor = function(t) {
				this.anchor_ = t, this.normalizedAnchor_ = null
			}, q_.prototype.getColor = function() {
				return this.color_
			}, q_.prototype.getImage = function(t) {
				return this.iconImage_.getImage(t)
			}, q_.prototype.getImageSize = function() {
				return this.iconImage_.getSize()
			}, q_.prototype.getHitDetectionImageSize = function() {
				return this.getImageSize()
			}, q_.prototype.getImageState = function() {
				return this.iconImage_.getImageState()
			}, q_.prototype.getHitDetectionImage = function(t) {
				return this.iconImage_.getHitDetectionImage(t)
			}, q_.prototype.getOrigin = function() {
				if (this.origin_) return this.origin_;
				var t = this.offset_;
				if (this.offsetOrigin_ != W_) {
					var e = this.getSize(),
						i = this.iconImage_.getSize();
					if (!e || !i) return null;
					t = t.slice(), this.offsetOrigin_ != K_ && this.offsetOrigin_ != V_ || (t[0] = i[
						0] - e[0] - t[0]), this.offsetOrigin_ != X_ && this.offsetOrigin_ != V_ || (
						t[1] = i[1] - e[1] - t[1])
				}
				return this.origin_ = t, this.origin_
			}, q_.prototype.getSrc = function() {
				return this.iconImage_.getSrc()
			}, q_.prototype.getSize = function() {
				return this.size_ || this.iconImage_.getSize()
			}, q_.prototype.listenImageChange = function(t, e) {
				return E(this.iconImage_, A.CHANGE, t, e)
			}, q_.prototype.load = function() {
				this.iconImage_.load()
			}, q_.prototype.unlistenImageChange = function(t, e) {
				x(this.iconImage_, A.CHANGE, t, e)
			}, q_),
			Z_ = function(t) {
				t = t || {};
				this.geometry_ = null, this.geometryFunction_ = tf, void 0 !== t.geometry && this
					.setGeometry(t.geometry), this.fill_ = void 0 !== t.fill ? t.fill : null, this.image_ =
					void 0 !== t.image ? t.image : null, this.renderer_ = void 0 !== t.renderer ? t
					.renderer : null, this.stroke_ = void 0 !== t.stroke ? t.stroke : null, this.text_ =
					void 0 !== t.text ? t.text : null, this.zIndex_ = t.zIndex
			};

		function q_(t) {
			var e = t || {},
				i = void 0 !== e.opacity ? e.opacity : 1,
				r = void 0 !== e.rotation ? e.rotation : 0,
				o = void 0 !== e.scale ? e.scale : 1,
				n = void 0 !== e.rotateWithView && e.rotateWithView;
			z_.call(this, {
					opacity: i,
					rotation: r,
					scale: o,
					rotateWithView: n
				}), this.anchor_ = void 0 !== e.anchor ? e.anchor : [.5, .5], this.normalizedAnchor_ = null,
				this.anchorOrigin_ = void 0 !== e.anchorOrigin ? e.anchorOrigin : W_, this.anchorXUnits_ =
				void 0 !== e.anchorXUnits ? e.anchorXUnits : D_, this.anchorYUnits_ = void 0 !== e
				.anchorYUnits ? e.anchorYUnits : D_, this.crossOrigin_ = void 0 !== e.crossOrigin ? e
				.crossOrigin : null;
			var s = void 0 !== e.img ? e.img : null,
				a = void 0 !== e.imgSize ? e.imgSize : null,
				t = e.src;
			$(!(void 0 !== t && s), 4), $(!s || s && a, 5), void 0 !== t && 0 !== t.length || !s || (t = s
				.src || ct(s)), $(void 0 !== t && 0 < t.length, 6);
			i = void 0 !== e.src ? Yh.IDLE : Yh.LOADED;
			this.color_ = void 0 !== e.color ? oo(e.color) : null, this.iconImage_ = (r = s, o = t, n = a,
					s = this.crossOrigin_, t = i, a = this.color_, (i = wl.get(o, s, a)) || (i = new j_(r,
						o, n, s, t, a), wl.set(o, s, a, i)), i), this.offset_ = void 0 !== e.offset ? e
				.offset : [0, 0], this.offsetOrigin_ = void 0 !== e.offsetOrigin ? e.offsetOrigin : W_, this
				.origin_ = null, this.size_ = void 0 !== e.size ? e.size : null
		}
		Z_.prototype.clone = function() {
			var t = this.getGeometry();
			return t && "object" == typeof t && (t = t.clone()), new Z_({
				geometry: t,
				fill: this.getFill() ? this.getFill().clone() : void 0,
				image: this.getImage() ? this.getImage().clone() : void 0,
				stroke: this.getStroke() ? this.getStroke().clone() : void 0,
				text: this.getText() ? this.getText().clone() : void 0,
				zIndex: this.getZIndex()
			})
		}, Z_.prototype.getRenderer = function() {
			return this.renderer_
		}, Z_.prototype.setRenderer = function(t) {
			this.renderer_ = t
		}, Z_.prototype.getGeometry = function() {
			return this.geometry_
		}, Z_.prototype.getGeometryFunction = function() {
			return this.geometryFunction_
		}, Z_.prototype.getFill = function() {
			return this.fill_
		}, Z_.prototype.setFill = function(t) {
			this.fill_ = t
		}, Z_.prototype.getImage = function() {
			return this.image_
		}, Z_.prototype.setImage = function(t) {
			this.image_ = t
		}, Z_.prototype.getStroke = function() {
			return this.stroke_
		}, Z_.prototype.setStroke = function(t) {
			this.stroke_ = t
		}, Z_.prototype.getText = function() {
			return this.text_
		}, Z_.prototype.setText = function(t) {
			this.text_ = t
		}, Z_.prototype.getZIndex = function() {
			return this.zIndex_
		}, Z_.prototype.setGeometry = function(e) {
			"function" == typeof e ? this.geometryFunction_ = e : "string" == typeof e ? this
				.geometryFunction_ = function(t) {
					return t.get(e)
				} : e ? void 0 !== e && (this.geometryFunction_ = function() {
					return e
				}) : this.geometryFunction_ = tf, this.geometry_ = e
		}, Z_.prototype.setZIndex = function(t) {
			this.zIndex_ = t
		};
		var J_ = null;

		function Q_(t, e) {
			var i, r;
			return J_ || (i = new ho({
				color: "rgba(255,255,255,0.4)"
			}), r = new uo({
				color: "#3399CC",
				width: 1.25
			}), J_ = [new Z_({
				image: new G_({
					fill: i,
					stroke: r,
					radius: 5
				}),
				fill: i,
				stroke: r
			})]), J_
		}

		function $_() {
			var t = {},
				e = [255, 255, 255, 1],
				i = [0, 153, 255, 1];
			return t[Ht.POLYGON] = [new Z_({
				fill: new ho({
					color: [255, 255, 255, .5]
				})
			})], t[Ht.MULTI_POLYGON] = t[Ht.POLYGON], t[Ht.LINE_STRING] = [new Z_({
				stroke: new uo({
					color: e,
					width: 5
				})
			}), new Z_({
				stroke: new uo({
					color: i,
					width: 3
				})
			})], t[Ht.MULTI_LINE_STRING] = t[Ht.LINE_STRING], t[Ht.CIRCLE] = t[Ht.POLYGON].concat(t[Ht
				.LINE_STRING]), t[Ht.POINT] = [new Z_({
				image: new G_({
					radius: 6,
					fill: new ho({
						color: i
					}),
					stroke: new uo({
						color: e,
						width: 1.5
					})
				}),
				zIndex: 1 / 0
			})], t[Ht.MULTI_POINT] = t[Ht.POINT], t[Ht.GEOMETRY_COLLECTION] = t[Ht.POLYGON].concat(t[Ht
				.LINE_STRING], t[Ht.POINT]), t
		}

		function tf(t) {
			return t.getGeometry()
		}
		var ef = Z_;

		function rf(t, e) {
			for (var i = t.length, r = new Array(i), o = 0; o < i; ++o) r[o] = function(r, o) {
				var n = /\{z\}/g,
					s = /\{x\}/g,
					a = /\{y\}/g,
					h = /\{-y\}/g;
				return function(e, t, i) {
					return e ? r.replace(n, e[0].toString()).replace(s, e[1].toString()).replace(a,
						function() {
							return (-e[2] - 1).toString()
						}).replace(h, function() {
						var t = e[0],
							t = o.getFullTileRange(t);
						return $(t, 55), (t.getHeight() + e[2]).toString()
					}) : void 0
				}
			}(t[o], e);
			return of(r)
		}

		function of (o) {
			return 1 === o.length ? o[0] : function(t, e, i) {
				if (t) {
					var r = re(yd(t), o.length);
					return o[r](t, e, i)
				}
			}
		}

		function nf(t, e, i) {}

		function sf(t) {
			var e = [],
				i = /\{([a-z])-([a-z])\}/.exec(t);
			if (i) {
				for (var r = i[1].charCodeAt(0), o = i[2].charCodeAt(0), n = r; n <= o; ++n) e.push(t
					.replace(i[0], String.fromCharCode(n)));
				return e
			}
			if (i = /\{(\d+)-(\d+)\}/.exec(t)) {
				for (var s = parseInt(i[2], 10), a = parseInt(i[1], 10); a <= s; a++) e.push(t.replace(i[0],
					a.toString()));
				return e
			}
			return e.push(t), e
		}

		function af(t, e, i, r) {
			var o = document.createElement("script"),
				n = "olc_" + ct(e);

			function s() {
				delete window[n], o.parentNode.removeChild(o)
			}
			o.async = !0, o.src = t + (-1 == t.indexOf("?") ? "?" : "&") + (r || "callback") + "=" + n;
			var a = setTimeout(function() {
				s(), i && i()
			}, 1e4);
			window[n] = function(t) {
				clearTimeout(a), s(), e(t)
			}, document.getElementsByTagName("head")[0].appendChild(o)
		}

		function hf(t, e, i, r) {
			var o = Ke(i, e, t),
				i = je(e, r, i),
				e = e.getMetersPerUnit();
			void 0 !== e && (i *= e);
			e = t.getMetersPerUnit();
			void 0 !== e && (i /= e);
			e = t.getExtent();
			return e && !vt(e, o) || (o = je(t, i, o) / i, isFinite(o) && 0 < o && (i /= o)), i
		}

		function lf(t, e, i, r) {
			var o = i - t,
				t = r - e,
				e = Math.sqrt(o * o + t * t);
			return [Math.round(i + o / e), Math.round(r + t / e)]
		}

		function uf(t, e, _, f, i, g, r, o, n, a, s) {
			var y = ds(Math.round(_ * t), Math.round(_ * e));
			if (0 === n.length) return y.canvas;
			y.scale(_, _);
			var m = [1 / 0, 1 / 0, -1 / 0, -1 / 0];
			n.forEach(function(t, e, i) {
				bt(m, t.extent)
			});
			var t = Bt(m),
				e = kt(m),
				v = ds(Math.round(_ * t / f), Math.round(_ * e / f)),
				h = _ / f;
			n.forEach(function(t, e, i) {
				var r = t.extent[0] - m[0],
					o = -(t.extent[3] - m[3]),
					n = Bt(t.extent),
					s = kt(t.extent);
				v.drawImage(t.image, a, a, t.image.width - 2 * a, t.image.height - 2 * a, r * h, o *
					h, n * h, s * h)
			});
			var x = Ut(r);
			return o.getTriangles().forEach(function(t, e, i) {
				var r = t.source,
					o = t.target,
					n = r[0][0],
					s = r[0][1],
					a = r[1][0],
					h = r[1][1],
					l = r[2][0],
					u = r[2][1],
					p = (o[0][0] - x[0]) / g,
					c = -(o[0][1] - x[1]) / g,
					d = (o[1][0] - x[0]) / g,
					t = -(o[1][1] - x[1]) / g,
					r = (o[2][0] - x[0]) / g,
					o = -(o[2][1] - x[1]) / g,
					n = n,
					s = s,
					a = function(t) {
						for (var e = t.length, i = 0; i < e; i++) {
							for (var r = i, o = Math.abs(t[i][i]), n = i + 1; n < e; n++) {
								var s = Math.abs(t[n][i]);
								o < s && (o = s, r = n)
							}
							if (0 === o) return null;
							var a = t[r];
							t[r] = t[i], t[i] = a;
							for (var h = i + 1; h < e; h++)
								for (var l = -t[h][i] / t[i][i], u = i; u < e + 1; u++) i == u ? t[
									h][u] = 0 : t[h][u] += l * t[i][u]
						}
						for (var p = new Array(e), c = e - 1; 0 <= c; c--) {
							p[c] = t[c][e] / t[c][c];
							for (var d = c - 1; 0 <= d; d--) t[d][e] -= t[d][c] * p[c]
						}
						return p
					}([
						[a -= n, h -= s, 0, 0, d - p],
						[l -= n, u -= s, 0, 0, r - p],
						[0, 0, a, h, t - c],
						[0, 0, l, u, o - c]
					]);
				a && (y.save(), y.beginPath(), u = lf(h = (p + d + r) / 3, l = (c + t + o) / 3, p,
						c), t = lf(h, l, d, t), o = lf(h, l, r, o), y.moveTo(t[0], t[1]), y
					.lineTo(u[0], u[1]), y.lineTo(o[0], o[1]), y.clip(), y.transform(a[0], a[2],
						a[1], a[3], p, c), y.translate(m[0] - n, m[3] - s), y.scale(f / _, -f /
						_), y.drawImage(v.canvas, 0, 0), y.restore())
			}), s && (y.save(), y.strokeStyle = "black", y.lineWidth = 1, o.getTriangles().forEach(
				function(t, e, i) {
					var r = t.target,
						o = (r[0][0] - x[0]) / g,
						n = -(r[0][1] - x[1]) / g,
						s = (r[1][0] - x[0]) / g,
						a = -(r[1][1] - x[1]) / g,
						t = (r[2][0] - x[0]) / g,
						r = -(r[2][1] - x[1]) / g;
					y.beginPath(), y.moveTo(s, a), y.lineTo(o, n), y.lineTo(t, r), y.closePath(), y
						.stroke()
				}), y.restore()), y.canvas
		}
		var pf = function(t, e, i, r, o) {
			this.sourceProj_ = t, this.targetProj_ = e;
			var n = {},
				s = We(this.targetProj_, this.sourceProj_);
			this.transformInv_ = function(t) {
					var e = t[0] + "/" + t[1];
					return n[e] || (n[e] = s(t)), n[e]
				}, this.maxSourceExtent_ = r, this.errorThresholdSquared_ = o * o, this.triangles_ = [],
				this.wrapsXInSource_ = !1, this.canWrapXInSource_ = this.sourceProj_.canWrapX() && !!
				r && !!this.sourceProj_.getExtent() && Bt(r) == Bt(this.sourceProj_.getExtent()), this
				.sourceWorldWidth_ = this.sourceProj_.getExtent() ? Bt(this.sourceProj_.getExtent()) :
				null, this.targetWorldWidth_ = this.targetProj_.getExtent() ? Bt(this.targetProj_
					.getExtent()) : null;
			var a, h = Ut(i),
				l = Yt(i),
				u = Nt(i),
				t = At(i),
				e = this.transformInv_(h),
				o = this.transformInv_(l),
				r = this.transformInv_(u),
				i = this.transformInv_(t);
			this.addQuad_(h, l, u, t, e, o, r, i, 10), this.wrapsXInSource_ && (a = 1 / 0, this
				.triangles_.forEach(function(t, e, i) {
					a = Math.min(a, t.source[0][0], t.source[1][0], t.source[2][0])
				}), this.triangles_.forEach(function(t) {
					var e, i;
					Math.max(t.source[0][0], t.source[1][0], t.source[2][0]) - a > this
						.sourceWorldWidth_ / 2 && ((e = [
								[t.source[0][0], t.source[0][1]],
								[t.source[1][0], t.source[1][1]],
								[t.source[2][0], t.source[2][1]]
							])[0][0] - a > this.sourceWorldWidth_ / 2 && (e[0][0] -= this
								.sourceWorldWidth_), e[1][0] - a > this.sourceWorldWidth_ / 2 &&
							(e[1][0] -= this.sourceWorldWidth_), e[2][0] - a > this
							.sourceWorldWidth_ / 2 && (e[2][0] -= this.sourceWorldWidth_), i =
							Math.min(e[0][0], e[1][0], e[2][0]), Math.max(e[0][0], e[1][0], e[2]
								[0]) - i < this.sourceWorldWidth_ / 2 && (t.source = e))
				}.bind(this))), n = {}
		};
		pf.prototype.addTriangle_ = function(t, e, i, r, o, n) {
			this.triangles_.push({
				source: [r, o, n],
				target: [t, e, i]
			})
		}, pf.prototype.addQuad_ = function(t, e, i, r, o, n, s, a, h) {
			var l, u, p, c, d = ft([o, n, s, a]),
				_ = this.sourceWorldWidth_ ? Bt(d) / this.sourceWorldWidth_ : null,
				f = this.sourceWorldWidth_,
				g = this.sourceProj_.canWrapX() && .5 < _ && _ < 1,
				y = !1;
			if (0 < h && (this.targetProj_.isGlobal() && this.targetWorldWidth_ && (y = .25 < Bt(ft([t,
					e, i, r
				])) / this.targetWorldWidth_ || y), !g && this.sourceProj_.isGlobal() && _ && (y =
					.25 < _ || y)), y || !this.maxSourceExtent_ || zt(d, this.maxSourceExtent_)) {
				if (!(y || isFinite(o[0]) && isFinite(o[1]) && isFinite(n[0]) && isFinite(n[1]) &&
						isFinite(s[0]) && isFinite(s[1]) && isFinite(a[0]) && isFinite(a[1]))) {
					if (!(0 < h)) return;
					y = !0
				}
				if (0 < h)
					if (y || (d = [(t[0] + i[0]) / 2, (t[1] + i[1]) / 2], d = this.transformInv_(d), y =
							(f = g ? (re(o[0], f) + re(s[0], f)) / 2 - re(d[0], f) : (o[0] + s[0]) / 2 -
								d[0]) * f + (d = (o[1] + s[1]) / 2 - d[1]) * d > this
							.errorThresholdSquared_), y) return void(Math.abs(t[0] - i[0]) <= Math.abs(
						t[1] - i[1]) ? (u = [(e[0] + i[0]) / 2, (e[1] + i[1]) / 2], c = this
						.transformInv_(u), l = [(r[0] + t[0]) / 2, (r[1] + t[1]) / 2], p =
						this.transformInv_(l), this.addQuad_(t, e, u, l, o, n, c, p, h - 1),
						this.addQuad_(l, u, i, r, p, c, s, a, h - 1)) : (l = [(t[0] + e[
						0]) / 2, (t[1] + e[1]) / 2
					], u = this.transformInv_(l), p = [(i[0] + r[0]) / 2, (i[1] + r[
						1]) / 2
					], c = this.transformInv_(p), this.addQuad_(t, l, p, r, o, u, c, a,
						h - 1), this.addQuad_(l, e, i, p, u, n, s, c, h - 1)));
				if (g) {
					if (!this.canWrapXInSource_) return;
					this.wrapsXInSource_ = !0
				}
				this.addTriangle_(t, i, r, o, s, a), this.addTriangle_(t, e, i, o, n, s)
			}
		}, pf.prototype.calculateSourceExtent = function() {
			var r = [1 / 0, 1 / 0, -1 / 0, -1 / 0];
			return this.triangles_.forEach(function(t, e, i) {
				t = t.source;
				Pt(r, t[0]), Pt(r, t[1]), Pt(r, t[2])
			}), r
		}, pf.prototype.getTriangles = function() {
			return this.triangles_
		};
		var cf, df, _f = pf,
			ff = ((df = ad) && (mf.__proto__ = df), ((mf.prototype = Object.create(df && df.prototype))
				.constructor = mf).prototype.disposeInternal = function() {
				this.state == Bn.LOADING && this.unlistenSources_(), df.prototype.disposeInternal.call(
					this)
			}, mf.prototype.getImage = function() {
				return this.canvas_
			}, mf.prototype.reproject_ = function() {
				var t, e, i, r, o, n = [];
				this.sourceTiles_.forEach(function(t, e, i) {
						t && t.getState() == Bn.LOADED && n.push({
							extent: this.sourceTileGrid_.getTileCoordExtent(t.tileCoord),
							image: t.getImage()
						})
					}.bind(this)), (this.sourceTiles_.length = 0) === n.length ? this.state = Bn.ERROR :
					(o = this.wrappedTileCoord_[0], t = "number" == typeof(r = this.targetTileGrid_
							.getTileSize(o)) ? r : r[0], e = "number" == typeof r ? r : r[1], i = this
						.targetTileGrid_.getResolution(o), r = this.sourceTileGrid_.getResolution(this
							.sourceZ_), o = this.targetTileGrid_.getTileCoordExtent(this
							.wrappedTileCoord_), this.canvas_ = uf(t, e, this.pixelRatio_, r, this
							.sourceTileGrid_.getExtent(), i, o, this.triangulation_, n, this.gutter_,
							this.renderEdges_), this.state = Bn.LOADED), this.changed()
			}, mf.prototype.load = function() {
				var n;
				this.state == Bn.IDLE && (this.state = Bn.LOADING, this.changed(), n = 0, this
					.sourcesListenerKeys_ = [], this.sourceTiles_.forEach(function(i, t, e) {
						var r, o = i.getState();
						o != Bn.IDLE && o != Bn.LOADING || (n++, r = E(i, A.CHANGE, function(
						t) {
							var e = i.getState();
							e != Bn.LOADED && e != Bn.ERROR && e != Bn.EMPTY || (S(
								r), 0 == --n && (this.unlistenSources_(),
								this.reproject_()))
						}, this), this.sourcesListenerKeys_.push(r))
					}.bind(this)), this.sourceTiles_.forEach(function(t, e, i) {
						t.getState() == Bn.IDLE && t.load()
					}), 0 === n && setTimeout(this.reproject_.bind(this), 0))
			}, mf.prototype.unlistenSources_ = function() {
				this.sourcesListenerKeys_.forEach(S), this.sourcesListenerKeys_ = null
			}, mf),
			gf = ((cf = kd) && (yf.__proto__ = cf), ((yf.prototype = Object.create(cf && cf.prototype))
				.constructor = yf).prototype.getTileLoadFunction = function() {
				return this.tileLoadFunction
			}, yf.prototype.getTileUrlFunction = function() {
				return this.tileUrlFunction
			}, yf.prototype.getUrls = function() {
				return this.urls
			}, yf.prototype.handleTileChange = function(t) {
				var e, i = t.target,
					r = ct(i),
					t = i.getState();
				t == Bn.LOADING ? (this.tileLoadingKeys_[r] = !0, e = "tileloadstart") : r in this
					.tileLoadingKeys_ && (delete this.tileLoadingKeys_[r], e = t == Bn.ERROR ?
						"tileloaderror" : t == Bn.LOADED || t == Bn.ABORT ? "tileloadend" : void 0),
					null != e && this.dispatchEvent(new Dd(e, i))
			}, yf.prototype.setTileLoadFunction = function(t) {
				this.tileCache.clear(), this.tileLoadFunction = t, this.changed()
			}, yf.prototype.setTileUrlFunction = function(t, e) {
				this.tileUrlFunction = t, this.tileCache.pruneExceptNewestZ(), void 0 !== e ? this
					.setKey(e) : this.changed()
			}, yf.prototype.setUrl = function(t) {
				t = this.urls = sf(t);
				this.setUrls(t)
			}, yf.prototype.setUrls = function(t) {
				var e = (this.urls = t).join("\n");
				this.generateTileUrlFunction_ ? this.setTileUrlFunction(rf(t, this.tileGrid), e) : this
					.setKey(e)
			}, yf.prototype.useTile = function(t, e, i) {
				i = fd(t, e, i);
				this.tileCache.containsKey(i) && this.tileCache.get(i)
			}, yf);

		function yf(t) {
			cf.call(this, {
					attributions: t.attributions,
					cacheSize: t.cacheSize,
					opaque: t.opaque,
					projection: t.projection,
					state: t.state,
					tileGrid: t.tileGrid,
					tilePixelRatio: t.tilePixelRatio,
					wrapX: t.wrapX,
					transition: t.transition,
					key: t.key,
					attributionsCollapsible: t.attributionsCollapsible
				}), this.generateTileUrlFunction_ = !t.tileUrlFunction, this.tileLoadFunction = t
				.tileLoadFunction, this.tileUrlFunction = t.tileUrlFunction ? t.tileUrlFunction.bind(this) :
				nf, this.urls = null, t.urls ? this.setUrls(t.urls) : t.url && this.setUrl(t.url), t
				.tileUrlFunction && this.setTileUrlFunction(t.tileUrlFunction, this.key_), this
				.tileLoadingKeys_ = {}
		}

		function mf(t, e, i, r, o, n, s, a, h, l, u) {
			df.call(this, o, Bn.IDLE), this.renderEdges_ = void 0 !== u && u, this.pixelRatio_ = s, this
				.gutter_ = a, this.canvas_ = null, this.sourceTileGrid_ = e, this.targetTileGrid_ = r, this
				.wrappedTileCoord_ = n || o, this.sourceTiles_ = [], this.sourcesListenerKeys_ = null, this
				.sourceZ_ = 0;
			a = r.getTileCoordExtent(this.wrappedTileCoord_), n = this.targetTileGrid_.getExtent(), o = this
				.sourceTileGrid_.getExtent(), n = n ? jt(a, n) : a;
			if (0 !== Ot(n)) {
				a = t.getExtent();
				a && (o = o ? jt(o, a) : a);
				r = r.getResolution(this.wrappedTileCoord_[0]), r = hf(t, i, Gt(n), r);
				if (!isFinite(r) || r <= 0) this.state = Bn.EMPTY;
				else {
					l = void 0 !== l ? l : .5;
					if (this.triangulation_ = new _f(t, i, n, o, r * l), 0 !== this.triangulation_
						.getTriangles().length) {
						this.sourceZ_ = e.getZForResolution(r);
						r = this.triangulation_.calculateSourceExtent();
						if (o && (t.canWrapX() ? (r[1] = Jt(r[1], o[1], o[3]), r[3] = Jt(r[3], o[1], o[
								3])) : r = jt(r, o)), Ot(r)) {
							for (var p = e.getTileRangeForExtentAndZ(r, this.sourceZ_), c = p.minX; c <= p
								.maxX; c++)
								for (var d = p.minY; d <= p.maxY; d++) {
									var _ = h(this.sourceZ_, c, d, s);
									_ && this.sourceTiles_.push(_)
								}
							0 === this.sourceTiles_.length && (this.state = Bn.EMPTY)
						} else this.state = Bn.EMPTY
					} else this.state = Bn.EMPTY
				}
			} else this.state = Bn.EMPTY
		}

		function vf(t, e) {
			t.getImage().src = e
		}
		var xf, Ef, Sf, Cf, wf, Tf, Rf, If, Lf, w = ((Lf = gf) && (Vf.__proto__ = Lf), ((Vf.prototype =
					Object.create(Lf && Lf.prototype)).constructor = Vf).prototype.canExpireCache =
				function() {
					if (this.tileCache.canExpireCache()) return !0;
					for (var t in this.tileCacheForProjection)
						if (this.tileCacheForProjection[t].canExpireCache()) return !0;
					return !1
				}, Vf.prototype.expireCache = function(t, e) {
					var i, r = this.getTileCacheForProjection(t);
					for (i in this.tileCache.expireCache(this.tileCache == r ? e : {}), this
						.tileCacheForProjection) {
						var o = this.tileCacheForProjection[i];
						o.expireCache(o == r ? e : {})
					}
				}, Vf.prototype.getGutterForProjection = function(t) {
					return this.getProjection() && t && !Xe(this.getProjection(), t) ? 0 : this.getGutter()
				}, Vf.prototype.getGutter = function() {
					return 0
				}, Vf.prototype.getOpaque = function(t) {
					return !(this.getProjection() && t && !Xe(this.getProjection(), t)) && Lf.prototype
						.getOpaque.call(this, t)
				}, Vf.prototype.getTileGridForProjection = function(t) {
					var e = this.getProjection();
					if (!this.tileGrid || e && !Xe(e, t)) {
						e = ct(t);
						return e in this.tileGridForProjection || (this.tileGridForProjection[e] = Ld(t)),
							this.tileGridForProjection[e]
					}
					return this.tileGrid
				}, Vf.prototype.getTileCacheForProjection = function(t) {
					var e = this.getProjection();
					if (!e || Xe(e, t)) return this.tileCache;
					t = ct(t);
					return t in this.tileCacheForProjection || (this.tileCacheForProjection[t] = new vd(this
						.tileCache.highWaterMark)), this.tileCacheForProjection[t]
				}, Vf.prototype.createTile_ = function(t, e, i, r, o, n) {
					e = [t, e, i], i = this.getTileCoordForTileUrlFunction(e, o), o = i ? this
						.tileUrlFunction(i, r, o) : void 0, o = new this.tileClass(e, void 0 !== o ? Bn
							.IDLE : Bn.EMPTY, void 0 !== o ? o : "", this.crossOrigin, this
							.tileLoadFunction, this.tileOptions);
					return o.key = n, E(o, A.CHANGE, this.handleTileChange, this), o
				}, Vf.prototype.getTile = function(t, e, i, r, o) {
					var n = this.getProjection();
					if (n && o && !Xe(n, o)) {
						var s, a = this.getTileCacheForProjection(o),
							h = [t, e, i],
							l = gd(h);
						a.containsKey(l) && (s = a.get(l));
						var u = this.getKey();
						if (s && s.key == u) return s;
						var p = this.getTileGridForProjection(n),
							c = this.getTileGridForProjection(o),
							d = this.getTileCoordForTileUrlFunction(h, o),
							d = new ff(n, p, o, c, h, d, this.getTilePixelRatio(r), this.getGutter(),
								function(t, e, i, r) {
									return this.getTileInternal(t, e, i, r, n)
								}.bind(this), this.reprojectionErrorThreshold_, this
								.renderReprojectionEdges_);
						return d.key = u, s ? (d.interimTile = s, d.refreshInterimChain(), a.replace(l,
							d)) : a.set(l, d), d
					}
					return this.getTileInternal(t, e, i, r, n || o)
				}, Vf.prototype.getTileInternal = function(t, e, i, r, o) {
					var n, s = null,
						a = fd(t, e, i),
						h = this.getKey();
					return this.tileCache.containsKey(a) ? (s = this.tileCache.get(a)).key != h && (n = s,
						s = this.createTile_(t, e, i, r, o, h), n.getState() == Bn.IDLE ? s
						.interimTile = n.interimTile : s.interimTile = n, s.refreshInterimChain(), this
						.tileCache.replace(a, s)) : (s = this.createTile_(t, e, i, r, o, h), this
						.tileCache.set(a, s)), s
				}, Vf.prototype.setRenderReprojectionEdges = function(t) {
					if (this.renderReprojectionEdges_ != t) {
						for (var e in this.renderReprojectionEdges_ = t, this.tileCacheForProjection) this
							.tileCacheForProjection[e].clear();
						this.changed()
					}
				}, Vf.prototype.setTileGridForProjection = function(t, e) {
					t = ke(t);
					t && ((t = ct(t)) in this.tileGridForProjection || (this.tileGridForProjection[t] = e))
				}, Vf),
			b = ((If = w) && (Xf.__proto__ = If), ((Xf.prototype = Object.create(If && If.prototype))
				.constructor = Xf).prototype.getApiKey = function() {
				return this.apiKey_
			}, Xf.prototype.getImagerySet = function() {
				return this.imagerySet_
			}, Xf.prototype.handleImageryMetadataResponse = function(t) {
				var e, i, r, n, s, l;
				200 == t.statusCode && "OK" == t.statusDescription && "ValidCredentials" == t
					.authenticationResultCode && 1 == t.resourceSets.length && 1 == t.resourceSets[0]
					.resources.length ? (e = t.resourceSets[0].resources[0], i = -1 == this.maxZoom_ ? e
						.zoomMax : this.maxZoom_, r = Fd(this.getProjection()), t = this.hidpi_ ? 2 : 1,
						t = e.imageWidth == e.imageHeight ? e.imageWidth / t : [e.imageWidth / t, e
							.imageHeight / t
						], t = bd({
							extent: r,
							minZoom: e.zoomMin,
							maxZoom: i,
							tileSize: t
						}), this.tileGrid = t, n = this.culture_, s = this.hidpi_, this
						.tileUrlFunction = of (e.imageUrlSubdomains.map(function(t) {
							var r = [0, 0, 0],
								o = e.imageUrl.replace("{subdomain}", t).replace("{culture}",
								n);
							return function(t, e, i) {
								if (t) {
									_d(t[0], t[1], -t[2] - 1, r);
									t = o;
									return s && (t += "&dpi=d1&device=mobile"), t.replace(
										"{quadkey}",
										function(t) {
											for (var e, i = t[0], r = new Array(i), o =
													1 << i - 1, n = 0; n < i; ++n) e =
												48, t[1] & o && (e += 1), t[2] & o && (
													e += 2), r[n] = String.fromCharCode(
													e), o >>= 1;
											return r.join("")
										}(r))
								}
							}
						})), e.imageryProviders && (l = Ve(ke("EPSG:4326"), this.getProjection()), this
							.setAttributions(function(s) {
								var a = [],
									t = s.viewState,
									h = this.getTileGrid().getTileCoordForCoordAndResolution(t
										.center, t.resolution)[0];
								return e.imageryProviders.map(function(t) {
									for (var e = !1, i = t.coverageAreas, r = 0, o = i
											.length; r < o; ++r) {
										var n = i[r];
										if (h >= n.zoomMin && h <= n.zoomMax) {
											n = n.bbox;
											if (zt(Wt([n[1], n[0], n[3], n[2]], l), s
													.extent)) {
												e = !0;
												break
											}
										}
									}
									e && a.push(t.attribution)
								}), a.push(
									'<a class="ol-attribution-bing-tos" href="https://www.microsoft.com/maps/product/terms.html">Terms of Use</a>'
									), a
							}.bind(this))), this.setState(bs)) : this.setState(Ps)
			}, Xf),
			le = ((Rf = w) && (zf.__proto__ = Rf), (zf.prototype = Object.create(Rf && Rf.prototype))
				.constructor = zf),
			ce = ((Tf = le) && (Bf.__proto__ = Tf), ((Bf.prototype = Object.create(Tf && Tf.prototype))
				.constructor = Bf).prototype.getConfig = function() {
				return this.config_
			}, Bf.prototype.updateConfig = function(t) {
				y(this.config_, t), this.initializeMap_()
			}, Bf.prototype.setConfig = function(t) {
				this.config_ = t || {}, this.initializeMap_()
			}, Bf.prototype.initializeMap_ = function() {
				var t, e, i = JSON.stringify(this.config_);
				this.templateCache_[i] ? this.applyTemplate_(this.templateCache_[i]) : (t = "https://" +
					this.account_ + ".carto.com/api/v1/map", this.mapId_ && (t += "/named/" + this
						.mapId_), (e = new XMLHttpRequest).addEventListener("load", this
						.handleInitResponse_.bind(this, i)), e.addEventListener("error", this
						.handleInitError_.bind(this)), e.open("POST", t), e.setRequestHeader(
						"Content-type", "application/json"), e.send(JSON.stringify(this.config_)))
			}, Bf.prototype.handleInitResponse_ = function(t, e) {
				var i, r = e.target;
				if (!r.status || 200 <= r.status && r.status < 300) {
					try {
						i = JSON.parse(r.responseText)
					} catch (t) {
						return void this.setState(Ps)
					}
					this.applyTemplate_(i), this.templateCache_[t] = i, this.setState(bs)
				} else this.setState(Ps)
			}, Bf.prototype.handleInitError_ = function(t) {
				this.setState(Ps)
			}, Bf.prototype.applyTemplate_ = function(t) {
				t = "https://" + t.cdn_url.https + "/" + this.account_ + "/api/v1/map/" + t
					.layergroupid + "/{z}/{x}/{y}.png";
				this.setUrl(t)
			}, Bf),
			bf = "addfeature",
			Pf = "changefeature",
			Mf = "clear",
			Ff = "removefeature",
			Of = ((wf = F) && (Yf.__proto__ = wf), (Yf.prototype = Object.create(wf && wf.prototype))
				.constructor = Yf),
			Af = ((Cf = Cd) && (Uf.__proto__ = Cf), ((Uf.prototype = Object.create(Cf && Cf.prototype))
				.constructor = Uf).prototype.addFeature = function(t) {
				this.addFeatureInternal(t), this.changed()
			}, Uf.prototype.addFeatureInternal = function(t) {
				var e, i = ct(t);
				this.addToIndex_(i, t) && (this.setupChangeEvents_(i, t), (e = t.getGeometry()) ? (e = e
						.getExtent(), this.featuresRtree_ && this.featuresRtree_.insert(e, t)) :
					this.nullGeometryFeatures_[i] = t, this.dispatchEvent(new Of(bf, t)))
			}, Uf.prototype.setupChangeEvents_ = function(t, e) {
				this.featureChangeKeys_[t] = [E(e, A.CHANGE, this.handleFeatureChange_, this), E(e, l,
					this.handleFeatureChange_, this)]
			}, Uf.prototype.addToIndex_ = function(t, e) {
				var i = !0,
					r = e.getId();
				return void 0 !== r ? r.toString() in this.idIndex_ ? i = !1 : this.idIndex_[r
				.toString()] = e : ($(!(t in this.undefIdIndex_), 30), this.undefIdIndex_[t] = e), i
			}, Uf.prototype.addFeatures = function(t) {
				this.addFeaturesInternal(t), this.changed()
			}, Uf.prototype.addFeaturesInternal = function(t) {
				for (var e = [], i = [], r = [], o = 0, n = t.length; o < n; o++) {
					var s = t[o],
						a = ct(s);
					this.addToIndex_(a, s) && i.push(s)
				}
				for (var h = 0, l = i.length; h < l; h++) {
					var u = i[h],
						p = ct(u);
					this.setupChangeEvents_(p, u);
					var c = u.getGeometry();
					c ? (c = c.getExtent(), e.push(c), r.push(u)) : this.nullGeometryFeatures_[p] = u
				}
				this.featuresRtree_ && this.featuresRtree_.load(e, r);
				for (var d = 0, _ = i.length; d < _; d++) this.dispatchEvent(new Of(bf, i[d]))
			}, Uf.prototype.bindFeaturesCollection_ = function(e) {
				var i = !1;
				E(this, bf, function(t) {
					i || (i = !0, e.push(t.feature), i = !1)
				}), E(this, Ff, function(t) {
					i || (i = !0, e.remove(t.feature), i = !1)
				}), E(e, s, function(t) {
					i || (i = !0, this.addFeature(t.element), i = !1)
				}, this), E(e, h, function(t) {
					i || (i = !0, this.removeFeature(t.element), i = !1)
				}, this), this.featuresCollection_ = e
			}, Uf.prototype.clear = function(t) {
				if (t) {
					for (var e in this.featureChangeKeys_) this.featureChangeKeys_[e].forEach(S);
					this.featuresCollection_ || (this.featureChangeKeys_ = {}, this.idIndex_ = {}, this
						.undefIdIndex_ = {})
				} else if (this.featuresRtree_)
					for (var i in this.featuresRtree_.forEach(this.removeFeatureInternal, this), this
							.nullGeometryFeatures_) this.removeFeatureInternal(this
						.nullGeometryFeatures_[i]);
				this.featuresCollection_ && this.featuresCollection_.clear(), this.featuresRtree_ &&
					this.featuresRtree_.clear(), this.loadedExtentsRtree_.clear(), this
					.nullGeometryFeatures_ = {};
				t = new Of(Mf);
				this.dispatchEvent(t), this.changed()
			}, Uf.prototype.forEachFeature = function(t) {
				if (this.featuresRtree_) return this.featuresRtree_.forEach(t);
				this.featuresCollection_ && this.featuresCollection_.forEach(t)
			}, Uf.prototype.forEachFeatureAtCoordinateDirect = function(e, i) {
				var t = [e[0], e[1], e[0], e[1]];
				return this.forEachFeatureInExtent(t, function(t) {
					return t.getGeometry().intersectsCoordinate(e) ? i(t) : void 0
				})
			}, Uf.prototype.forEachFeatureInExtent = function(t, e) {
				if (this.featuresRtree_) return this.featuresRtree_.forEachInExtent(t, e);
				this.featuresCollection_ && this.featuresCollection_.forEach(e)
			}, Uf.prototype.forEachFeatureIntersectingExtent = function(e, i) {
				return this.forEachFeatureInExtent(e, function(t) {
					if (t.getGeometry().intersectsExtent(e)) {
						t = i(t);
						if (t) return t
					}
				})
			}, Uf.prototype.getFeaturesCollection = function() {
				return this.featuresCollection_
			}, Uf.prototype.getFeatures = function() {
				var t;
				return this.featuresCollection_ ? t = this.featuresCollection_.getArray() : this
					.featuresRtree_ && (t = this.featuresRtree_.getAll(), dt(this
						.nullGeometryFeatures_) || st(t, p(this.nullGeometryFeatures_))), t
			}, Uf.prototype.getFeaturesAtCoordinate = function(t) {
				var e = [];
				return this.forEachFeatureAtCoordinateDirect(t, function(t) {
					e.push(t)
				}), e
			}, Uf.prototype.getFeaturesInExtent = function(t) {
				return this.featuresRtree_.getInExtent(t)
			}, Uf.prototype.getClosestFeatureToCoordinate = function(t, e) {
				var r = t[0],
					o = t[1],
					n = null,
					s = [NaN, NaN],
					a = 1 / 0,
					h = [-1 / 0, -1 / 0, 1 / 0, 1 / 0],
					l = e || R;
				return this.featuresRtree_.forEachInExtent(h, function(t) {
					var e, i;
					l(t) && (e = t.getGeometry(), i = a, (a = e.closestPointXY(r, o, s, a)) <
						i && (n = t, t = Math.sqrt(a), h[0] = r - t, h[1] = o - t, h[2] =
							r + t, h[3] = o + t))
				}), n
			}, Uf.prototype.getExtent = function(t) {
				return this.featuresRtree_.getExtent(t)
			}, Uf.prototype.getFeatureById = function(t) {
				t = this.idIndex_[t.toString()];
				return void 0 !== t ? t : null
			}, Uf.prototype.getFormat = function() {
				return this.format_
			}, Uf.prototype.getOverlaps = function() {
				return this.overlaps_
			}, Uf.prototype.getUrl = function() {
				return this.url_
			}, Uf.prototype.handleFeatureChange_ = function(t) {
				var e = t.target,
					i = ct(e),
					t = e.getGeometry();
				t ? (r = t.getExtent(), i in this.nullGeometryFeatures_ ? (delete this
						.nullGeometryFeatures_[i], this.featuresRtree_ && this.featuresRtree_
						.insert(r, e)) : this.featuresRtree_ && this.featuresRtree_.update(r, e)) : i in
					this.nullGeometryFeatures_ || (this.featuresRtree_ && this.featuresRtree_.remove(e),
						this.nullGeometryFeatures_[i] = e);
				var r = e.getId();
				void 0 !== r ? (r = r.toString(), i in this.undefIdIndex_ ? (delete this.undefIdIndex_[
						i], this.idIndex_[r] = e) : this.idIndex_[r] !== e && (this
						.removeFromIdIndex_(e), this.idIndex_[r] = e)) : i in this.undefIdIndex_ || (
						this.removeFromIdIndex_(e), this.undefIdIndex_[i] = e), this.changed(), this
					.dispatchEvent(new Of(Pf, e))
			}, Uf.prototype.hasFeature = function(t) {
				var e = t.getId();
				return void 0 !== e ? e in this.idIndex_ : ct(t) in this.undefIdIndex_
			}, Uf.prototype.isEmpty = function() {
				return this.featuresRtree_.isEmpty() && dt(this.nullGeometryFeatures_)
			}, Uf.prototype.loadFeatures = function(t, i, r) {
				var o = this,
					n = this.loadedExtentsRtree_,
					s = this.strategy_(t, i);
				this.loading = !1;
				for (var e = 0, a = s.length; e < a; ++e) ! function(t) {
					var e = s[t];
					n.forEachInExtent(e, function(t) {
						return xt(t.extent, e)
					}) || (o.loader_.call(o, e, i, r), n.insert(e, {
						extent: e.slice()
					}), o.loading = o.loader_ !== L)
				}(e)
			}, Uf.prototype.removeLoadedExtent = function(e) {
				var i, t = this.loadedExtentsRtree_;
				t.forEachInExtent(e, function(t) {
					if (Lt(t.extent, e)) return i = t, !0
				}), i && t.remove(i)
			}, Uf.prototype.removeFeature = function(t) {
				var e = ct(t);
				e in this.nullGeometryFeatures_ ? delete this.nullGeometryFeatures_[e] : this
					.featuresRtree_ && this.featuresRtree_.remove(t), this.removeFeatureInternal(t),
					this.changed()
			}, Uf.prototype.removeFeatureInternal = function(t) {
				var e = ct(t);
				this.featureChangeKeys_[e].forEach(S), delete this.featureChangeKeys_[e];
				var i = t.getId();
				void 0 !== i ? delete this.idIndex_[i.toString()] : delete this.undefIdIndex_[e], this
					.dispatchEvent(new Of(Ff, t))
			}, Uf.prototype.removeFromIdIndex_ = function(t) {
				var e, i = !1;
				for (e in this.idIndex_)
					if (this.idIndex_[e] === t) {
						delete this.idIndex_[e], i = !0;
						break
					} return i
			}, Uf.prototype.setLoader = function(t) {
				this.loader_ = t
			}, Uf),
			ve = ((Sf = Af) && (jf.__proto__ = Sf), ((jf.prototype = Object.create(Sf && Sf.prototype))
				.constructor = jf).prototype.getDistance = function() {
				return this.distance
			}, jf.prototype.getSource = function() {
				return this.source
			}, jf.prototype.loadFeatures = function(t, e, i) {
				this.source.loadFeatures(t, e, i), e !== this.resolution && (this.clear(), this
					.resolution = e, this.cluster(), this.addFeatures(this.features))
			}, jf.prototype.setDistance = function(t) {
				this.distance = t, this.refresh()
			}, jf.prototype.refresh = function() {
				this.clear(), this.cluster(), this.addFeatures(this.features), Sf.prototype.refresh
					.call(this)
			}, jf.prototype.cluster = function() {
				if (void 0 !== this.resolution)
					for (var t = [1 / (this.features.length = 0), 1 / 0, -1 / 0, -1 / 0], e = this
							.distance * this.resolution, i = this.source.getFeatures(), r = {}, o = 0,
							n = i.length; o < n; o++) {
						var s = i[o];
						ct(s) in r || (s = this.geometryFunction(s)) && (Rt(s.getCoordinates(), t), gt(
							t, e, t), s = (s = this.source.getFeaturesInExtent(t)).filter(
							function(t) {
								t = ct(t);
								return !(t in r || (r[t] = !0, 0))
							}), this.features.push(this.createCluster(s)))
					}
			}, jf.prototype.createCluster = function(t) {
				for (var e = [0, 0], i = t.length - 1; 0 <= i; --i) {
					var r = this.geometryFunction(t[i]);
					r ? Pr(e, r.getCoordinates()) : t.splice(i, 1)
				}
				Gr(e, 1 / t.length);
				var o = new et(new Oi(e));
				return o.set("features", t), o
			}, jf),
			Nf = ((Ef = Uh) && (kf.__proto__ = Ef), ((kf.prototype = Object.create(Ef && Ef.prototype))
				.constructor = kf).prototype.disposeInternal = function() {
				this.state == Yh.LOADING && this.unlistenSource_(), Ef.prototype.disposeInternal.call(
					this)
			}, kf.prototype.getImage = function() {
				return this.canvas_
			}, kf.prototype.getProjection = function() {
				return this.targetProj_
			}, kf.prototype.reproject_ = function() {
				var t, e, i = this.sourceImage_.getState();
				i == Yh.LOADED && (t = Bt(this.targetExtent_) / this.targetResolution_, e = kt(this
					.targetExtent_) / this.targetResolution_, this.canvas_ = uf(t, e, this
					.sourcePixelRatio_, this.sourceImage_.getResolution(), this
					.maxSourceExtent_, this.targetResolution_, this.targetExtent_, this
					.triangulation_, [{
						extent: this.sourceImage_.getExtent(),
						image: this.sourceImage_.getImage()
					}], 0)), this.state = i, this.changed()
			}, kf.prototype.load = function() {
				var t;
				this.state == Yh.IDLE && (this.state = Yh.LOADING, this.changed(), (t = this
						.sourceImage_.getState()) == Yh.LOADED || t == Yh.ERROR ? this
				.reproject_() : (this.sourceListenerKey_ = E(this.sourceImage_, A.CHANGE, function(
						t) {
						var e = this.sourceImage_.getState();
						e != Yh.LOADED && e != Yh.ERROR || (this.unlistenSource_(), this
							.reproject_())
					}, this), this.sourceImage_.load()))
			}, kf.prototype.unlistenSource_ = function() {
				S(this.sourceListenerKey_), this.sourceListenerKey_ = null
			}, kf),
			Gf = ((xf = F) && (Df.__proto__ = xf), (Df.prototype = Object.create(xf && xf.prototype))
				.constructor = Df);

		function Df(t, e) {
			xf.call(this, t), this.image = e
		}

		function kf(t, e, i, r, o, n) {
			var s = t.getExtent(),
				a = e.getExtent(),
				h = a ? jt(i, a) : i,
				a = hf(t, e, Gt(h), r),
				h = new _f(t, e, h, s, .5 * a),
				n = n(h.calculateSourceExtent(), a, o),
				a = Yh.LOADED;
			n && (a = Yh.IDLE);
			o = n ? n.getPixelRatio() : 1;
			Ef.call(this, i, r, o, a), this.targetProj_ = e, this.maxSourceExtent_ = s, this
				.triangulation_ = h, this.targetResolution_ = r, this.targetExtent_ = i, this.sourceImage_ =
				n, this.sourcePixelRatio_ = o, this.canvas_ = null, this.sourceListenerKey_ = null
		}

		function jf(t) {
			Sf.call(this, {
					attributions: t.attributions,
					wrapX: t.wrapX
				}), this.resolution = void 0, this.distance = void 0 !== t.distance ? t.distance : 20, this
				.features = [], this.geometryFunction = t.geometryFunction || function(t) {
					t = t.getGeometry();
					return $(t.getType() == Ht.POINT, 10), t
				}, this.source = t.source, E(this.source, A.CHANGE, this.refresh, this)
		}

		function Uf(t) {
			var e = t || {};
			Cf.call(this, {
					attributions: e.attributions,
					projection: void 0,
					state: bs,
					wrapX: void 0 === e.wrapX || e.wrapX
				}), this.loader_ = L, this.format_ = e.format, this.overlaps_ = null == e.overlaps || e
				.overlaps, this.url_ = e.url, void 0 !== e.loader ? this.loader_ = e.loader : void 0 !==
				this.url_ && ($(this.format_, 7), this.loader_ = i_(this.url_, this.format_)), this
				.strategy_ = void 0 !== e.strategy ? e.strategy : r_;
			var i, r, t = void 0 === e.useSpatialIndex || e.useSpatialIndex;
			this.featuresRtree_ = t ? new Pc : null, this.loadedExtentsRtree_ = new Pc, this
				.nullGeometryFeatures_ = {}, this.idIndex_ = {}, this.undefIdIndex_ = {}, this
				.featureChangeKeys_ = {}, this.featuresCollection_ = null, Array.isArray(e.features) ? r = e
				.features : e.features && (r = (i = e.features).getArray()), t || void 0 !== i || (i =
					new Z(r)), void 0 !== r && this.addFeaturesInternal(r), void 0 !== i && this
				.bindFeaturesCollection_(i)
		}

		function Yf(t, e) {
			wf.call(this, t), this.feature = e
		}

		function Bf(t) {
			Tf.call(this, {
					attributions: t.attributions,
					cacheSize: t.cacheSize,
					crossOrigin: t.crossOrigin,
					maxZoom: void 0 !== t.maxZoom ? t.maxZoom : 18,
					minZoom: t.minZoom,
					projection: t.projection,
					wrapX: t.wrapX
				}), this.account_ = t.account, this.mapId_ = t.map || "", this.config_ = t.config || {},
				this.templateCache_ = {}, this.initializeMap_()
		}

		function zf(t) {
			var e = t || {},
				i = void 0 !== e.projection ? e.projection : "EPSG:3857",
				t = void 0 !== e.tileGrid ? e.tileGrid : bd({
					extent: Fd(i),
					maxZoom: e.maxZoom,
					minZoom: e.minZoom,
					tileSize: e.tileSize
				});
			Rf.call(this, {
				attributions: e.attributions,
				cacheSize: e.cacheSize,
				crossOrigin: e.crossOrigin,
				opaque: e.opaque,
				projection: i,
				reprojectionErrorThreshold: e.reprojectionErrorThreshold,
				tileGrid: t,
				tileLoadFunction: e.tileLoadFunction,
				tilePixelRatio: e.tilePixelRatio,
				tileUrlFunction: e.tileUrlFunction,
				url: e.url,
				urls: e.urls,
				wrapX: void 0 === e.wrapX || e.wrapX,
				transition: e.transition,
				attributionsCollapsible: e.attributionsCollapsible
			})
		}

		function Xf(t) {
			var e = void 0 !== t.hidpi && t.hidpi;
			If.call(this, {
					cacheSize: t.cacheSize,
					crossOrigin: "anonymous",
					opaque: !0,
					projection: ke("EPSG:3857"),
					reprojectionErrorThreshold: t.reprojectionErrorThreshold,
					state: Ls,
					tileLoadFunction: t.tileLoadFunction,
					tilePixelRatio: e ? 2 : 1,
					wrapX: void 0 === t.wrapX || t.wrapX,
					transition: t.transition
				}), this.hidpi_ = e, this.culture_ = void 0 !== t.culture ? t.culture : "en-us", this
				.maxZoom_ = void 0 !== t.maxZoom ? t.maxZoom : -1, this.apiKey_ = t.key, this.imagerySet_ =
				t.imagerySet, af("https://dev.virtualearth.net/REST/v1/Imagery/Metadata/" + this
					.imagerySet_ + "?uriScheme=https&include=ImageryProviders&key=" + this.apiKey_ + "&c=" +
					this.culture_, this.handleImageryMetadataResponse.bind(this), void 0, "jsonp")
		}

		function Vf(t) {
			Lf.call(this, {
					attributions: t.attributions,
					cacheSize: t.cacheSize,
					opaque: t.opaque,
					projection: t.projection,
					state: t.state,
					tileGrid: t.tileGrid,
					tileLoadFunction: t.tileLoadFunction || vf,
					tilePixelRatio: t.tilePixelRatio,
					tileUrlFunction: t.tileUrlFunction,
					url: t.url,
					urls: t.urls,
					wrapX: t.wrapX,
					transition: t.transition,
					key: t.key,
					attributionsCollapsible: t.attributionsCollapsible
				}), this.crossOrigin = void 0 !== t.crossOrigin ? t.crossOrigin : null, this.tileClass =
				void 0 !== t.tileClass ? t.tileClass : cd, this.tileCacheForProjection = {}, this
				.tileGridForProjection = {}, this.reprojectionErrorThreshold_ = t
				.reprojectionErrorThreshold, this.renderReprojectionEdges_ = !1
		}

		function Wf(t, e) {
			t.getImage().src = e
		}
		var Kf, Hf, Te = ((Hf = Cd) && (Jf.__proto__ = Hf), ((Jf.prototype = Object.create(Hf && Hf
				.prototype)).constructor = Jf).prototype.getResolutions = function() {
				return this.resolutions_
			}, Jf.prototype.findNearestResolution = function(t) {
				var e;
				return this.resolutions_ && (e = nt(this.resolutions_, t, 0), t = this.resolutions_[e]),
					t
			}, Jf.prototype.getImage = function(t, e, i, r) {
				var o = this.getProjection();
				if (o && r && !Xe(o, r)) {
					if (this.reprojectedImage_) {
						if (this.reprojectedRevision_ == this.getRevision() && Xe(this.reprojectedImage_
								.getProjection(), r) && this.reprojectedImage_.getResolution() == e &&
							Lt(this.reprojectedImage_.getExtent(), t)) return this.reprojectedImage_;
						this.reprojectedImage_.dispose(), this.reprojectedImage_ = null
					}
					return this.reprojectedImage_ = new Nf(o, r, t, e, i, function(t, e, i) {
							return this.getImageInternal(t, e, i, o)
						}.bind(this)), this.reprojectedRevision_ = this.getRevision(), this
						.reprojectedImage_
				}
				return o && (r = o), this.getImageInternal(t, e, i, r)
			}, Jf.prototype.getImageInternal = function(t, e, i, r) {
				return a()
			}, Jf.prototype.handleImageChange = function(t) {
				var e = t.target;
				switch (e.getState()) {
					case Yh.LOADING:
						this.loading = !0, this.dispatchEvent(new Gf("imageloadstart", e));
						break;
					case Yh.LOADED:
						this.loading = !1, this.dispatchEvent(new Gf("imageloadend", e));
						break;
					case Yh.ERROR:
						this.loading = !1, this.dispatchEvent(new Gf("imageloaderror", e))
				}
			}, Jf),
			Zf = ((Kf = Uh) && (qf.__proto__ = Kf), ((qf.prototype = Object.create(Kf && Kf.prototype))
				.constructor = qf).prototype.getImage = function() {
				return this.image_
			}, qf.prototype.handleImageError_ = function() {
				this.state = Yh.ERROR, this.unlistenImage_(), this.changed()
			}, qf.prototype.handleImageLoad_ = function() {
				void 0 === this.resolution && (this.resolution = kt(this.extent) / this.image_.height),
					this.state = Yh.LOADED, this.unlistenImage_(), this.changed()
			}, qf.prototype.load = function() {
				this.state != Yh.IDLE && this.state != Yh.ERROR || (this.state = Yh.LOADING, this
					.changed(), this.imageListenerKeys_ = [v(this.image_, A.ERROR, this
						.handleImageError_, this), v(this.image_, A.LOAD, this.handleImageLoad_,
						this)], this.imageLoadFunction_(this, this.src_))
			}, qf.prototype.setImage = function(t) {
				this.image_ = t
			}, qf.prototype.unlistenImage_ = function() {
				this.imageListenerKeys_.forEach(S), this.imageListenerKeys_ = null
			}, qf);

		function qf(t, e, i, r, o, n) {
			Kf.call(this, t, e, i, Yh.IDLE), this.src_ = r, this.image_ = new Image, null !== o && (this
					.image_.crossOrigin = o), this.imageListenerKeys_ = null, this.state = Yh.IDLE, this
				.imageLoadFunction_ = n
		}

		function Jf(t) {
			Hf.call(this, {
					attributions: t.attributions,
					projection: t.projection,
					state: t.state
				}), this.resolutions_ = void 0 !== t.resolutions ? t.resolutions : null, this
				.reprojectedImage_ = null, this.reprojectedRevision_ = 0
		}

		function Qf(t, e) {
			var i = [];
			Object.keys(e).forEach(function(t) {
				null !== e[t] && void 0 !== e[t] && i.push(t + "=" + encodeURIComponent(e[t]))
			});
			var r = i.join("&");
			return (t = -1 === (t = t.replace(/[?&]$/, "")).indexOf("?") ? t + "?" : t + "&") + r
		}
		var $f, tg, xe = ((tg = Te) && (ig.__proto__ = tg), ((ig.prototype = Object.create(tg && tg
				.prototype)).constructor = ig).prototype.getParams = function() {
				return this.params_
			}, ig.prototype.getImageInternal = function(t, e, i, r) {
				if (void 0 === this.url_) return null;
				e = this.findNearestResolution(e), i = this.hidpi_ ? i : 1;
				var o = this.image_;
				if (o && this.renderedRevision_ == this.getRevision() && o.getResolution() == e && o
					.getPixelRatio() == i && xt(o.getExtent(), t)) return o;
				var n = {
					F: "image",
					FORMAT: "PNG32",
					TRANSPARENT: !0
				};
				y(n, this.params_);
				var s = ((t = t.slice())[0] + t[2]) / 2,
					a = (t[1] + t[3]) / 2;
				1 != this.ratio_ && (h = this.ratio_ * Bt(t) / 2, l = this.ratio_ * kt(t) / 2, t[0] =
					s - h, t[1] = a - l, t[2] = s + h, t[3] = a + l);
				var o = e / i,
					h = Math.ceil(Bt(t) / o),
					l = Math.ceil(kt(t) / o);
				t[0] = s - o * h / 2, t[2] = s + o * h / 2, t[1] = a - o * l / 2, t[3] = a + o * l / 2,
					this.imageSize_[0] = h, this.imageSize_[1] = l;
				n = this.getRequestUrl_(t, this.imageSize_, i, r, n);
				return this.image_ = new Zf(t, e, i, n, this.crossOrigin_, this.imageLoadFunction_),
					this.renderedRevision_ = this.getRevision(), E(this.image_, A.CHANGE, this
						.handleImageChange, this), this.image_
			}, ig.prototype.getImageLoadFunction = function() {
				return this.imageLoadFunction_
			}, ig.prototype.getRequestUrl_ = function(t, e, i, r, o) {
				r = r.getCode().split(":").pop();
				o.SIZE = e[0] + "," + e[1], o.BBOX = t.join(","), o.BBOXSR = r, o.IMAGESR = r, o.DPI =
					Math.round(90 * i);
				r = this.url_, i = r.replace(/MapServer\/?$/, "MapServer/export").replace(
					/ImageServer\/?$/, "ImageServer/exportImage");
				return i == r && $(!1, 50), Qf(i, o)
			}, ig.prototype.getUrl = function() {
				return this.url_
			}, ig.prototype.setImageLoadFunction = function(t) {
				this.image_ = null, this.imageLoadFunction_ = t, this.changed()
			}, ig.prototype.setUrl = function(t) {
				t != this.url_ && (this.url_ = t, this.image_ = null, this.changed())
			}, ig.prototype.updateParams = function(t) {
				y(this.params_, t), this.image_ = null, this.changed()
			}, ig),
			Re = (($f = Te) && (eg.__proto__ = $f), ((eg.prototype = Object.create($f && $f.prototype))
				.constructor = eg).prototype.getImageInternal = function(t, e, i, r) {
				e = this.findNearestResolution(e);
				var o = this.canvas_;
				if (o && this.renderedRevision_ == this.getRevision() && o.getResolution() == e && o
					.getPixelRatio() == i && xt(o.getExtent(), t)) return o;
				Vt(t = t.slice(), this.ratio_);
				var n = [Bt(t) / e * i, kt(t) / e * i],
					r = this.canvasFunction_.call(this, t, e, i, n, r);
				return r && (o = new Bh(t, e, i, r)), this.canvas_ = o, this.renderedRevision_ = this
					.getRevision(), o
			}, eg);

		function eg(t) {
			t = t || {};
			$f.call(this, {
					attributions: t.attributions,
					projection: t.projection,
					resolutions: t.resolutions,
					state: t.state
				}), this.canvasFunction_ = t.canvasFunction, this.canvas_ = null, this.renderedRevision_ =
				0, this.ratio_ = void 0 !== t.ratio ? t.ratio : 1.5
		}

		function ig(t) {
			t = t || {};
			tg.call(this, {
					attributions: t.attributions,
					projection: t.projection,
					resolutions: t.resolutions
				}), this.crossOrigin_ = void 0 !== t.crossOrigin ? t.crossOrigin : null, this.hidpi_ =
				void 0 === t.hidpi || t.hidpi, this.url_ = t.url, this.imageLoadFunction_ = void 0 !== t
				.imageLoadFunction ? t.imageLoadFunction : Wf, this.params_ = t.params || {}, this.image_ =
				null, this.imageSize_ = [0, 0], this.renderedRevision_ = 0, this.ratio_ = void 0 !== t
				.ratio ? t.ratio : 1.5
		}
		var rg, og, ng, sg, ag, rr = ((ag = Te) && (vg.__proto__ = ag), ((vg.prototype = Object.create(ag &&
				ag.prototype)).constructor = vg).prototype.getParams = function() {
				return this.params_
			}, vg.prototype.getImageInternal = function(t, e, i, r) {
				e = this.findNearestResolution(e), i = this.hidpi_ ? i : 1;
				var o = this.image_;
				if (o && this.renderedRevision_ == this.getRevision() && o.getResolution() == e && o
					.getPixelRatio() == i && xt(o.getExtent(), t)) return o;
				1 != this.ratio_ && Vt(t = t.slice(), this.ratio_);
				var n = [Bt(t) / e * i, kt(t) / e * i];
				return void 0 !== this.url_ ? (r = this.getUrl(this.url_, this.params_, t, n, r), E(o =
						new Zf(t, e, i, r, this.crossOrigin_, this.imageLoadFunction_), A.CHANGE,
						this.handleImageChange, this)) : o = null, this.image_ = o, this
					.renderedRevision_ = this.getRevision(), o
			}, vg.prototype.getImageLoadFunction = function() {
				return this.imageLoadFunction_
			}, vg.prototype.updateParams = function(t) {
				y(this.params_, t), this.changed()
			}, vg.prototype.getUrl = function(t, e, i, r, o) {
				var n, s, a, h, l, u, s = (n = this.metersPerUnit_, s = this.displayDpi_, a = Bt(i), h =
						kt(i), l = r[0], u = r[1], s = .0254 / s, l * h < u * a ? a * n / (l * s) : h *
						n / (u * s)),
					i = Gt(i),
					i = {
						OPERATION: this.useOverlay_ ? "GETDYNAMICMAPOVERLAYIMAGE" : "GETMAPIMAGE",
						VERSION: "2.0.0",
						LOCALE: "en",
						CLIENTAGENT: "ol/source/ImageMapGuide source",
						CLIP: "1",
						SETDISPLAYDPI: this.displayDpi_,
						SETDISPLAYWIDTH: Math.round(r[0]),
						SETDISPLAYHEIGHT: Math.round(r[1]),
						SETVIEWSCALE: s,
						SETVIEWCENTERX: i[0],
						SETVIEWCENTERY: i[1]
					};
				return y(i, e), Qf(t, i)
			}, vg.prototype.setImageLoadFunction = function(t) {
				this.image_ = null, this.imageLoadFunction_ = t, this.changed()
			}, vg),
			go = ((sg = Te) && (mg.__proto__ = sg), ((mg.prototype = Object.create(sg && sg.prototype))
				.constructor = mg).prototype.getImageExtent = function() {
				return this.imageExtent_
			}, mg.prototype.getImageInternal = function(t, e, i, r) {
				return zt(t, this.image_.getExtent()) ? this.image_ : null
			}, mg.prototype.getUrl = function() {
				return this.url_
			}, mg.prototype.handleImageChange = function(t) {
				var e, i, r, o, n;
				this.image_.getState() == Yh.LOADED && (n = this.image_.getExtent(), i = this.image_
					.getImage(), r = this.imageSize_ ? (e = this.imageSize_[0], this.imageSize_[
					1]) : (e = i.width, i.height), o = kt(n) / r, (n = Math.ceil(Bt(n) / o)) != e &&
					(n = (o = ds(n, r)).canvas, o.drawImage(i, 0, 0, e, r, 0, 0, n.width, n.height),
						this.image_.setImage(n))), sg.prototype.handleImageChange.call(this, t)
			}, mg),
			hg = "1.3.0",
			lg = "carmentaserver",
			ug = "geoserver",
			pg = "mapserver",
			cg = [101, 101],
			mo = ((ng = Te) && (yg.__proto__ = ng), ((yg.prototype = Object.create(ng && ng.prototype))
				.constructor = yg).prototype.getGetFeatureInfoUrl = function(t, e, i, r) {
				if (void 0 !== this.url_) {
					var o = ke(i),
						n = this.getProjection();
					n && n !== o && (e = hf(n, o, t, e), t = Ke(t, o, n));
					var s = Dt(t, e, 0, cg),
						i = {
							SERVICE: "WMS",
							VERSION: hg,
							REQUEST: "GetFeatureInfo",
							FORMAT: "image/png",
							TRANSPARENT: !0,
							QUERY_LAYERS: this.params_.LAYERS
						};
					y(i, this.params_, r);
					r = Math.floor((t[0] - s[0]) / e), e = Math.floor((s[3] - t[1]) / e);
					return i[this.v13_ ? "I" : "X"] = r, i[this.v13_ ? "J" : "Y"] = e, this
						.getRequestUrl_(s, cg, 1, n || o, i)
				}
			}, yg.prototype.getParams = function() {
				return this.params_
			}, yg.prototype.getImageInternal = function(t, e, i, r) {
				if (void 0 === this.url_) return null;
				e = this.findNearestResolution(e), 1 == i || this.hidpi_ && void 0 !== this
					.serverType_ || (i = 1);
				var o = e / i,
					n = Gt(t),
					s = Dt(n, o, 0, [Math.ceil(Bt(t) / o), Math.ceil(kt(t) / o)]),
					n = Dt(n, o, 0, [Math.ceil(this.ratio_ * Bt(t) / o), Math.ceil(this.ratio_ * kt(t) /
						o)]),
					t = this.image_;
				if (t && this.renderedRevision_ == this.getRevision() && t.getResolution() == e && t
					.getPixelRatio() == i && xt(t.getExtent(), s)) return t;
				t = {
					SERVICE: "WMS",
					VERSION: hg,
					REQUEST: "GetMap",
					FORMAT: "image/png",
					TRANSPARENT: !0
				};
				y(t, this.params_), this.imageSize_[0] = Math.round(Bt(n) / o), this.imageSize_[1] =
					Math.round(kt(n) / o);
				t = this.getRequestUrl_(n, this.imageSize_, i, r, t);
				return this.image_ = new Zf(n, e, i, t, this.crossOrigin_, this.imageLoadFunction_),
					this.renderedRevision_ = this.getRevision(), E(this.image_, A.CHANGE, this
						.handleImageChange, this), this.image_
			}, yg.prototype.getImageLoadFunction = function() {
				return this.imageLoadFunction_
			}, yg.prototype.getRequestUrl_ = function(t, e, i, r, o) {
				if ($(void 0 !== this.url_, 9), o[this.v13_ ? "CRS" : "SRS"] = r.getCode(), "STYLES" in
					this.params_ || (o.STYLES = ""), 1 != i) switch (this.serverType_) {
					case ug:
						var n = 90 * i + .5 | 0;
						"FORMAT_OPTIONS" in o ? o.FORMAT_OPTIONS += ";dpi:" + n : o.FORMAT_OPTIONS =
							"dpi:" + n;
						break;
					case pg:
						o.MAP_RESOLUTION = 90 * i;
						break;
					case lg:
					case "qgis":
						o.DPI = 90 * i;
						break;
					default:
						$(!1, 8)
				}
				o.WIDTH = e[0], o.HEIGHT = e[1];
				r = r.getAxisOrientation(), t = this.v13_ && "ne" == r.substr(0, 2) ? [t[1], t[0], t[3],
					t[2]
				] : t;
				return o.BBOX = t.join(","), Qf(this.url_, o)
			}, yg.prototype.getUrl = function() {
				return this.url_
			}, yg.prototype.setImageLoadFunction = function(t) {
				this.image_ = null, this.imageLoadFunction_ = t, this.changed()
			}, yg.prototype.setUrl = function(t) {
				t != this.url_ && (this.url_ = t, this.image_ = null, this.changed())
			}, yg.prototype.updateParams = function(t) {
				y(this.params_, t), this.updateV13_(), this.image_ = null, this.changed()
			}, yg.prototype.updateV13_ = function() {
				var t = this.params_.VERSION || hg;
				this.v13_ = 0 <= br(t, "1.3")
			}, yg),
			dg = '&#169; <a href="https://www.openstreetmap.org/copyright">OpenStreetMap</a> contributors.',
			No = ((og = le) && (gg.__proto__ = og), (gg.prototype = Object.create(og && og.prototype))
				.constructor = gg),
			_g = e(2),
			Sn = ((rg = $s) && (fg.__proto__ = rg), (fg.prototype = Object.create(rg && rg.prototype))
				.constructor = fg);

		function fg(t) {
			t = t || {};
			rg.call(this, t), this.type = zh.IMAGE
		}

		function gg(t) {
			var e = t || {},
				i = void 0 !== e.attributions ? e.attributions : [dg],
				r = void 0 !== e.crossOrigin ? e.crossOrigin : "anonymous",
				t = void 0 !== e.url ? e.url : "https://{a-c}.tile.openstreetmap.org/{z}/{x}/{y}.png";
			og.call(this, {
				attributions: i,
				cacheSize: e.cacheSize,
				crossOrigin: r,
				opaque: void 0 === e.opaque || e.opaque,
				maxZoom: void 0 !== e.maxZoom ? e.maxZoom : 19,
				reprojectionErrorThreshold: e.reprojectionErrorThreshold,
				tileLoadFunction: e.tileLoadFunction,
				url: t,
				wrapX: e.wrapX,
				attributionsCollapsible: !1
			})
		}

		function yg(t) {
			t = t || {};
			ng.call(this, {
					attributions: t.attributions,
					projection: t.projection,
					resolutions: t.resolutions
				}), this.crossOrigin_ = void 0 !== t.crossOrigin ? t.crossOrigin : null, this.url_ = t.url,
				this.imageLoadFunction_ = void 0 !== t.imageLoadFunction ? t.imageLoadFunction : Wf, this
				.params_ = t.params || {}, this.v13_ = !0, this.updateV13_(), this.serverType_ = t
				.serverType, this.hidpi_ = void 0 === t.hidpi || t.hidpi, this.image_ = null, this
				.imageSize_ = [0, 0], this.renderedRevision_ = 0, this.ratio_ = void 0 !== t.ratio ? t
				.ratio : 1.5
		}

		function mg(t) {
			var e = void 0 !== t.crossOrigin ? t.crossOrigin : null,
				i = void 0 !== t.imageLoadFunction ? t.imageLoadFunction : Wf;
			sg.call(this, {
				attributions: t.attributions,
				projection: ke(t.projection)
			}), this.url_ = t.url, this.imageExtent_ = t.imageExtent, this.image_ = new Zf(this
				.imageExtent_, void 0, 1, this.url_, e, i), this.imageSize_ = t.imageSize || null, E(
				this.image_, A.CHANGE, this.handleImageChange, this)
		}

		function vg(t) {
			ag.call(this, {
					projection: t.projection,
					resolutions: t.resolutions
				}), this.crossOrigin_ = void 0 !== t.crossOrigin ? t.crossOrigin : null, this.displayDpi_ =
				void 0 !== t.displayDpi ? t.displayDpi : 96, this.params_ = t.params || {}, this.url_ = t
				.url, this.imageLoadFunction_ = void 0 !== t.imageLoadFunction ? t.imageLoadFunction : Wf,
				this.hidpi_ = void 0 === t.hidpi || t.hidpi, this.metersPerUnit_ = void 0 !== t
				.metersPerUnit ? t.metersPerUnit : 1, this.ratio_ = void 0 !== t.ratio ? t.ratio : 1, this
				.useOverlay_ = void 0 !== t.useOverlay && t.useOverlay, this.image_ = null, this
				.renderedRevision_ = 0
		}
		Sn.prototype.getSource;
		var xg, Eg = Sn,
			Sg = "preload",
			Cg = "useInterimTilesOnError",
			jo = ((xg = $s) && (wg.__proto__ = xg), ((wg.prototype = Object.create(xg && xg.prototype))
				.constructor = wg).prototype.getPreload = function() {
				return this.get(Sg)
			}, wg.prototype.setPreload = function(t) {
				this.set(Sg, t)
			}, wg.prototype.getUseInterimTilesOnError = function() {
				return this.get(Cg)
			}, wg.prototype.setUseInterimTilesOnError = function(t) {
				this.set(Cg, t)
			}, wg);

		function wg(t) {
			var e = t || {},
				t = y({}, e);
			delete t.preload, delete t.useInterimTilesOnError, xg.call(this, t), this.setPreload(void 0 !==
				e.preload ? e.preload : 0), this.setUseInterimTilesOnError(void 0 === e
				.useInterimTilesOnError || e.useInterimTilesOnError), this.type = zh.TILE
		}
		jo.prototype.getSource;
		var Tg, Rg = jo,
			Ig = "pixel",
			Lg = "image",
			bg = ((Tg = F) && (Mg.__proto__ = Tg), (Mg.prototype = Object.create(Tg && Tg.prototype))
				.constructor = Mg),
			Pg = null;

		function Mg(t, e, i) {
			Tg.call(this, t), this.extent = e.extent, this.resolution = e.viewState.resolution / e
				.pixelRatio, this.data = i
		}
		var Fg, Og, zn = ((Og = Te) && (kg.__proto__ = Og), ((kg.prototype = Object.create(Og && Og
				.prototype)).constructor = kg).prototype.setOperation = function(t, e) {
				this.worker_ = new _g.Processor({
					operation: t,
					imageOps: this.operationType_ === Lg,
					queue: 1,
					lib: e,
					threads: this.threads_
				}), this.changed()
			}, kg.prototype.updateFrameState_ = function(t, e, i) {
				var r = y({}, this.frameState_);
				r.viewState = y({}, r.viewState);
				var o = Gt(t);
				r.extent = t.slice(), r.focus = o, r.size[0] = Math.round(Bt(t) / e), r.size[1] = Math
					.round(kt(t) / e), r.time = Date.now(), r.animate = !1;
				t = r.viewState;
				return t.center = o, t.projection = i, t.resolution = e, r
			}, kg.prototype.allSourcesReady_ = function() {
				for (var t = !0, e = 0, i = this.renderers_.length; e < i; ++e)
					if (this.renderers_[e].getLayer().getSource().getState() !== bs) {
						t = !1;
						break
					} return t
			}, kg.prototype.getImage = function(t, e, i, r) {
				if (!this.allSourcesReady_()) return null;
				var o, n = this.updateFrameState_(t, e, r);
				return this.requestedFrameState_ = n, this.renderedImageCanvas_ && (o = this
						.renderedImageCanvas_.getResolution(), r = this.renderedImageCanvas_
					.getExtent(), e === o && Lt(t, r) || (this.renderedImageCanvas_ = null)), this
					.renderedImageCanvas_ && this.getRevision() === this.renderedRevision_ || this
					.processSources_(), n.tileQueue.loadMoreTiles(16, 16), n.animate &&
					requestAnimationFrame(this.changed.bind(this)), this.renderedImageCanvas_
			}, kg.prototype.processSources_ = function() {
				for (var t = this.requestedFrameState_, e = this.renderers_.length, i = new Array(e),
						r = 0; r < e; ++r) {
					var o = function(t, e, i) {
						if (!t.prepareFrame(e, i)) return null;
						var r, o = e.size[0],
							n = e.size[1];
						return !Pg || (r = Pg.canvas).width !== o || r.height !== n ? Pg = ds(o,
							n) : Pg.clearRect(0, 0, o, n), t.composeFrame(e, i, Pg), Pg
							.getImageData(0, 0, o, n)
					}(this.renderers_[r], t, t.layerStatesArray[r]);
					if (!o) return;
					i[r] = o
				}
				var n = {};
				this.dispatchEvent(new bg("beforeoperations", t, n)), this.worker_.process(i, n, this
					.onWorkerComplete_.bind(this, t))
			}, kg.prototype.onWorkerComplete_ = function(t, e, i, r) {
				var o, n;
				!e && i && (o = t.extent, (e = t.viewState.resolution) === this.requestedFrameState_
					.viewState.resolution && Lt(o, this.requestedFrameState_.extent) && (this
						.renderedImageCanvas_ ? n = this.renderedImageCanvas_.getImage().getContext(
							"2d") : (n = ds(Math.round(Bt(o) / e), Math.round(kt(o) / e)), this
							.renderedImageCanvas_ = new Bh(o, e, 1, n.canvas)), n.putImageData(i, 0,
							0), this.changed(), this.renderedRevision_ = this.getRevision(), this
						.dispatchEvent(new bg("afteroperations", t, r))))
			}, kg.prototype.getImageInternal = function() {
				return null
			}, kg),
			Ag = [
				'Map tiles by <a href="https://stamen.com/">Stamen Design</a>, under <a href="https://creativecommons.org/licenses/by/3.0/">CC BY 3.0</a>.',
				dg
			],
			Ng = {
				terrain: {
					extension: "jpg",
					opaque: !0
				},
				"terrain-background": {
					extension: "jpg",
					opaque: !0
				},
				"terrain-labels": {
					extension: "png",
					opaque: !1
				},
				"terrain-lines": {
					extension: "png",
					opaque: !1
				},
				"toner-background": {
					extension: "png",
					opaque: !0
				},
				toner: {
					extension: "png",
					opaque: !0
				},
				"toner-hybrid": {
					extension: "png",
					opaque: !1
				},
				"toner-labels": {
					extension: "png",
					opaque: !1
				},
				"toner-lines": {
					extension: "png",
					opaque: !1
				},
				"toner-lite": {
					extension: "png",
					opaque: !0
				},
				watercolor: {
					extension: "jpg",
					opaque: !0
				}
			},
			Gg = {
				terrain: {
					minZoom: 4,
					maxZoom: 18
				},
				toner: {
					minZoom: 0,
					maxZoom: 20
				},
				watercolor: {
					minZoom: 1,
					maxZoom: 16
				}
			},
			yl = ((Fg = le) && (Dg.__proto__ = Fg), (Dg.prototype = Object.create(Fg && Fg.prototype))
				.constructor = Dg);

		function Dg(t) {
			var e = t.layer.indexOf("-"),
				i = -1 == e ? t.layer : t.layer.slice(0, e),
				r = Gg[i],
				e = Ng[t.layer],
				i = void 0 !== t.url ? t.url : "https://stamen-tiles-{a-d}.a.ssl.fastly.net/" + t.layer +
				"/{z}/{x}/{y}." + e.extension;
			Fg.call(this, {
				attributions: Ag,
				cacheSize: t.cacheSize,
				crossOrigin: "anonymous",
				maxZoom: (null != t.maxZoom ? t : r).maxZoom,
				minZoom: (null != t.minZoom ? t : r).minZoom,
				opaque: e.opaque,
				reprojectionErrorThreshold: t.reprojectionErrorThreshold,
				tileLoadFunction: t.tileLoadFunction,
				url: i,
				wrapX: t.wrapX
			})
		}

		function kg(t) {
			Og.call(this, {
					projection: null
				}), this.worker_ = null, this.operationType_ = void 0 !== t.operationType ? t
				.operationType : Ig, this.threads_ = void 0 !== t.threads ? t.threads : 1, this.renderers_ =
				function(t) {
					for (var e, i, r, o, n = t.length, s = new Array(n), a = 0; a < n; ++a) s[a] = (e = t[
						a], o = r = i = void 0, o = r = i = e, e = null, "function" == typeof i
						.getTile ? (i = new Rg({
							source: i
						}), e = new $l(i)) : "function" == typeof r.getImage ? (r = new Eg({
							source: r
						}), e = new Wl(r)) : o.getType() === zh.TILE ? e = new $l(o) : o.getType() != zh
						.IMAGE && o.getType() != zh.VECTOR || (e = new Wl(o)), e);
					return s
				}(t.sources);
			for (var e = 0, i = this.renderers_.length; e < i; ++e) E(this.renderers_[e], A.CHANGE, this
				.changed, this);
			this.tileQueue_ = new Zn(function() {
				return 1
			}, this.changed.bind(this));
			for (var r = this.renderers_.map(function(t) {
					return t.getLayer().getLayerState()
				}), o = {}, n = 0, s = r.length; n < s; ++n) o[ct(r[n].layer)] = r[n];
			this.requestedFrameState_, this.renderedImageCanvas_ = null, this.renderedRevision_, this
				.frameState_ = {
					animate: !1,
					coordinateToPixelTransform: [1, 0, 0, 1, 0, 0],
					extent: null,
					focus: null,
					index: 0,
					layerStates: o,
					layerStatesArray: r,
					pixelRatio: 1,
					pixelToCoordinateTransform: [1, 0, 0, 1, 0, 0],
					postRenderFunctions: [],
					size: [0, 0],
					skippedFeatureUids: {},
					tileQueue: this.tileQueue_,
					time: Date.now(),
					usedTiles: {},
					viewState: {
						rotation: 0
					},
					viewHints: [],
					wantedTiles: {}
				}, void 0 !== t.operation && this.setOperation(t.operation, t.lib)
		}

		function jg(t, e, i) {
			var r = this.getTileGrid();
			if (!((r = r || this.getTileGridForProjection(i)).getResolutions().length <= t[0])) {
				var o = r.getTileCoordExtent(t, this.tmpExtent_),
					n = Ds(r.getTileSize(t[0]), this.tmpSize);
				1 != e && (n = Gs(n, e, this.tmpSize));
				r = {
					F: "image",
					FORMAT: "PNG32",
					TRANSPARENT: !0
				};
				return y(r, this.params_), this.getRequestUrl_(t, n, o, e, i, r)
			}
		}
		var Ug, Yg, Bg, zg, El = ((zg = w) && (Hg.__proto__ = zg), ((Hg.prototype = Object.create(zg && zg
				.prototype)).constructor = Hg).prototype.getKeyForParams_ = function() {
				var t, e = 0,
					i = [];
				for (t in this.params_) i[e++] = t + "-" + this.params_[t];
				return i.join("/")
			}, Hg.prototype.getParams = function() {
				return this.params_
			}, Hg.prototype.getRequestUrl_ = function(t, e, i, r, o, n) {
				var s = this.urls;
				if (s) {
					o = o.getCode().split(":").pop();
					return n.SIZE = e[0] + "," + e[1], n.BBOX = i.join(","), n.BBOXSR = o, n.IMAGESR =
						o, n.DPI = Math.round(n.DPI ? n.DPI * r : 90 * r), Qf((1 == s.length ? s[0] : s[
								re(yd(t), s.length)]).replace(/MapServer\/?$/, "MapServer/export")
							.replace(/ImageServer\/?$/, "ImageServer/exportImage"), n)
				}
			}, Hg.prototype.getTilePixelRatio = function(t) {
				return t
			}, Hg.prototype.updateParams = function(t) {
				y(this.params_, t), this.setKey(this.getKeyForParams_())
			}, Hg),
			Xg = ((Bg = ad) && (Kg.__proto__ = Bg), ((Kg.prototype = Object.create(Bg && Bg.prototype))
				.constructor = Kg).prototype.getImage = function() {
				if (this.canvas_) return this.canvas_;
				var t = this.tileSize_,
					e = ds(t[0], t[1]);
				return e.strokeStyle = "black", e.strokeRect(.5, .5, t[0] + .5, t[1] + .5), e
					.fillStyle = "black", e.textAlign = "center", e.textBaseline = "middle", e.font =
					"24px sans-serif", e.fillText(this.text_, t[0] / 2, t[1] / 2), this.canvas_ = e
					.canvas, e.canvas
			}, Kg.prototype.load = function() {}, Kg),
			kl = ((Yg = kd) && (Wg.__proto__ = Yg), ((Wg.prototype = Object.create(Yg && Yg.prototype))
				.constructor = Wg).prototype.getTile = function(t, e, i) {
				var r = fd(t, e, i);
				if (this.tileCache.containsKey(r)) return this.tileCache.get(r);
				var o = Ds(this.tileGrid.getTileSize(t)),
					e = [t, e, i],
					i = this.getTileCoordForTileUrlFunction(e),
					i = i ? this.getTileCoordForTileUrlFunction(i).toString() : "",
					i = new Xg(e, o, i);
				return this.tileCache.set(r, i), i
			}, Wg),
			tu = ((Ug = w) && (Vg.__proto__ = Ug), ((Vg.prototype = Object.create(Ug && Ug.prototype))
				.constructor = Vg).prototype.onXHRLoad_ = function(t) {
				var e, i = t.target;
				if (!i.status || 200 <= i.status && i.status < 300) {
					try {
						e = JSON.parse(i.responseText)
					} catch (t) {
						return void this.handleTileJSONError()
					}
					this.handleTileJSONResponse(e)
				} else this.handleTileJSONError()
			}, Vg.prototype.onXHRError_ = function(t) {
				this.handleTileJSONError()
			}, Vg.prototype.getTileJSON = function() {
				return this.tileJSON_
			}, Vg.prototype.handleTileJSONResponse = function(e) {
				var t, i = ke("EPSG:4326"),
					r = this.getProjection();
				void 0 !== e.bounds && (s = Ve(i, r), t = Wt(e.bounds, s));
				var o, n = e.minzoom || 0,
					s = e.maxzoom || 22,
					n = bd({
						extent: Fd(r),
						maxZoom: s,
						minZoom: n
					});
				this.tileGrid = n, this.tileUrlFunction = rf(e.tiles, n), void 0 === e.attribution ||
					this.getAttributions() || (o = void 0 !== t ? t : i.getExtent(), this
						.setAttributions(function(t) {
							return zt(o, t.extent) ? [e.attribution] : null
						})), this.tileJSON_ = e, this.setState(bs)
			}, Vg.prototype.handleTileJSONError = function() {
				this.setState(Ps)
			}, Vg);

		function Vg(t) {
			var e;
			Ug.call(this, {
					attributions: t.attributions,
					cacheSize: t.cacheSize,
					crossOrigin: t.crossOrigin,
					projection: ke("EPSG:3857"),
					reprojectionErrorThreshold: t.reprojectionErrorThreshold,
					state: Ls,
					tileLoadFunction: t.tileLoadFunction,
					wrapX: void 0 === t.wrapX || t.wrapX,
					transition: t.transition
				}), this.tileJSON_ = null, t.url ? t.jsonp ? af(t.url, this.handleTileJSONResponse.bind(
					this), this.handleTileJSONError.bind(this)) : ((e = new XMLHttpRequest)
					.addEventListener("load", this.onXHRLoad_.bind(this)), e.addEventListener("error", this
						.onXHRError_.bind(this)), e.open("GET", t.url), e.send()) : t.tileJSON ? this
				.handleTileJSONResponse(t.tileJSON) : $(!1, 51)
		}

		function Wg(t) {
			Yg.call(this, {
				opaque: !1,
				projection: t.projection,
				tileGrid: t.tileGrid,
				wrapX: void 0 === t.wrapX || t.wrapX
			})
		}

		function Kg(t, e, i) {
			Bg.call(this, t, Bn.LOADED), this.tileSize_ = e, this.text_ = i, this.canvas_ = null
		}

		function Hg(t) {
			t = t || {};
			zg.call(this, {
					attributions: t.attributions,
					cacheSize: t.cacheSize,
					crossOrigin: t.crossOrigin,
					projection: t.projection,
					reprojectionErrorThreshold: t.reprojectionErrorThreshold,
					tileGrid: t.tileGrid,
					tileLoadFunction: t.tileLoadFunction,
					tileUrlFunction: jg,
					url: t.url,
					urls: t.urls,
					wrapX: void 0 === t.wrapX || t.wrapX,
					transition: t.transition
				}), this.params_ = t.params || {}, this.tmpExtent_ = [1 / 0, 1 / 0, -1 / 0, -1 / 0], this
				.setKey(this.getKeyForParams_())
		}

		function Zg(t, e, i) {
			var r = this.getTileGrid();
			if (!((r = r || this.getTileGridForProjection(i)).getResolutions().length <= t[0])) {
				1 == e || this.hidpi_ && void 0 !== this.serverType_ || (e = 1);
				var o = r.getResolution(t[0]),
					n = r.getTileCoordExtent(t, this.tmpExtent_),
					s = Ds(r.getTileSize(t[0]), this.tmpSize),
					r = this.gutter_;
				0 !== r && (s = Ns(s, r, this.tmpSize), n = gt(n, o * r, n)), 1 != e && (s = Gs(s, e, this
					.tmpSize));
				r = {
					SERVICE: "WMS",
					VERSION: hg,
					REQUEST: "GetMap",
					FORMAT: "image/png",
					TRANSPARENT: !0
				};
				return y(r, this.params_), this.getRequestUrl_(t, s, n, e, i, r)
			}
		}
		var qg, Jg, Qg, $g, iu = (($g = w) && (ny.__proto__ = $g), ((ny.prototype = Object.create($g && $g
				.prototype)).constructor = ny).prototype.getGetFeatureInfoUrl = function(t, e, i, r) {
				var o = ke(i),
					n = this.getProjection(),
					s = this.getTileGrid(),
					a = (s = s || this.getTileGridForProjection(o)).getTileCoordForCoordAndResolution(t,
						e);
				if (!(s.getResolutions().length <= a[0])) {
					var h = s.getResolution(a[0]),
						i = s.getTileCoordExtent(a, this.tmpExtent_),
						e = Ds(s.getTileSize(a[0]), this.tmpSize),
						s = this.gutter_;
					0 !== s && (e = Ns(e, s, this.tmpSize), i = gt(i, h * s, i)), n && n !== o && (h =
						hf(n, o, t, h), i = He(i, o, n), t = Ke(t, o, n));
					s = {
						SERVICE: "WMS",
						VERSION: hg,
						REQUEST: "GetFeatureInfo",
						FORMAT: "image/png",
						TRANSPARENT: !0,
						QUERY_LAYERS: this.params_.LAYERS
					};
					y(s, this.params_, r);
					r = Math.floor((t[0] - i[0]) / h), h = Math.floor((i[3] - t[1]) / h);
					return s[this.v13_ ? "I" : "X"] = r, s[this.v13_ ? "J" : "Y"] = h, this
						.getRequestUrl_(a, e, i, 1, n || o, s)
				}
			}, ny.prototype.getGutter = function() {
				return this.gutter_
			}, ny.prototype.getParams = function() {
				return this.params_
			}, ny.prototype.getRequestUrl_ = function(t, e, i, r, o, n) {
				var s = this.urls;
				if (s) {
					if (n.WIDTH = e[0], n.HEIGHT = e[1], n[this.v13_ ? "CRS" : "SRS"] = o.getCode(),
						"STYLES" in this.params_ || (n.STYLES = ""), 1 != r) switch (this.serverType_) {
						case ug:
							var a = 90 * r + .5 | 0;
							"FORMAT_OPTIONS" in n ? n.FORMAT_OPTIONS += ";dpi:" + a : n
								.FORMAT_OPTIONS = "dpi:" + a;
							break;
						case pg:
							n.MAP_RESOLUTION = 90 * r;
							break;
						case lg:
						case "qgis":
							n.DPI = 90 * r;
							break;
						default:
							$(!1, 52)
					}
					var e = o.getAxisOrientation(),
						o = i;
					return this.v13_ && "ne" == e.substr(0, 2) && (e = i[0], o[0] = i[1], o[1] = e, e =
						i[2], o[2] = i[3], o[3] = e), n.BBOX = o.join(","), Qf(1 == s.length ? s[
						0] : s[re(yd(t), s.length)], n)
				}
			}, ny.prototype.getTilePixelRatio = function(t) {
				return this.hidpi_ && void 0 !== this.serverType_ ? t : 1
			}, ny.prototype.getKeyForParams_ = function() {
				var t, e = 0,
					i = [];
				for (t in this.params_) i[e++] = t + "-" + this.params_[t];
				return i.join("/")
			}, ny.prototype.updateParams = function(t) {
				y(this.params_, t), this.updateV13_(), this.setKey(this.getKeyForParams_())
			}, ny.prototype.updateV13_ = function() {
				var t = this.params_.VERSION || hg;
				this.v13_ = 0 <= br(t, "1.3")
			}, ny),
			ty = ((Qg = ad) && (oy.__proto__ = Qg), ((oy.prototype = Object.create(Qg && Qg.prototype))
				.constructor = oy).prototype.getImage = function() {
				return null
			}, oy.prototype.getData = function(t) {
				if (!this.grid_ || !this.keys_) return null;
				var e = (t[0] - this.extent_[0]) / (this.extent_[2] - this.extent_[0]),
					t = (t[1] - this.extent_[1]) / (this.extent_[3] - this.extent_[1]),
					t = this.grid_[Math.floor((1 - t) * this.grid_.length)];
				if ("string" != typeof t) return null;
				e = t.charCodeAt(Math.floor(e * t.length));
				93 <= e && e--, 35 <= e && e--;
				t = null;
				return (e -= 32) in this.keys_ && (e = this.keys_[e], t = this.data_ && e in this
					.data_ ? this.data_[e] : e), t
			}, oy.prototype.forDataAtCoordinate = function(e, i, r, t) {
				this.state == Bn.IDLE && !0 === t ? (v(this, A.CHANGE, function(t) {
					i.call(r, this.getData(e))
				}, this), this.loadInternal_()) : !0 === t ? setTimeout(function() {
					i.call(r, this.getData(e))
				}.bind(this), 0) : i.call(r, this.getData(e))
			}, oy.prototype.getKey = function() {
				return this.src_
			}, oy.prototype.handleError_ = function() {
				this.state = Bn.ERROR, this.changed()
			}, oy.prototype.handleLoad_ = function(t) {
				this.grid_ = t.grid, this.keys_ = t.keys, this.data_ = t.data, this.state = Bn.EMPTY,
					this.changed()
			}, oy.prototype.loadInternal_ = function() {
				var t;
				this.state == Bn.IDLE && (this.state = Bn.LOADING, this.jsonp_ ? af(this.src_, this
					.handleLoad_.bind(this), this.handleError_.bind(this)) : ((t =
						new XMLHttpRequest).addEventListener("load", this.onXHRLoad_.bind(
					this)), t.addEventListener("error", this.onXHRError_.bind(this)), t.open(
						"GET", this.src_), t.send()))
			}, oy.prototype.onXHRLoad_ = function(t) {
				var e, i = t.target;
				if (!i.status || 200 <= i.status && i.status < 300) {
					try {
						e = JSON.parse(i.responseText)
					} catch (t) {
						return void this.handleError_()
					}
					this.handleLoad_(e)
				} else this.handleError_()
			}, oy.prototype.onXHRError_ = function(t) {
				this.handleError_()
			}, oy.prototype.load = function() {
				this.preemptive_ && this.loadInternal_()
			}, oy),
			lu = ((Jg = kd) && (ry.__proto__ = Jg), ((ry.prototype = Object.create(Jg && Jg.prototype))
				.constructor = ry).prototype.onXHRLoad_ = function(t) {
				var e, i = t.target;
				if (!i.status || 200 <= i.status && i.status < 300) {
					try {
						e = JSON.parse(i.responseText)
					} catch (t) {
						return void this.handleTileJSONError()
					}
					this.handleTileJSONResponse(e)
				} else this.handleTileJSONError()
			}, ry.prototype.onXHRError_ = function(t) {
				this.handleTileJSONError()
			}, ry.prototype.getTemplate = function() {
				return this.template_
			}, ry.prototype.forDataAtCoordinateAndResolution = function(t, e, i, r) {
				this.tileGrid ? (e = this.tileGrid.getTileCoordForCoordAndResolution(t, e), this
					.getTile(e[0], e[1], e[2], 1, this.getProjection()).forDataAtCoordinate(t, i,
						null, r)) : !0 === r ? setTimeout(function() {
					i(null)
				}, 0) : i(null)
			}, ry.prototype.handleTileJSONError = function() {
				this.setState(Ps)
			}, ry.prototype.handleTileJSONResponse = function(e) {
				var t, i = ke("EPSG:4326"),
					r = this.getProjection();
				void 0 !== e.bounds && (n = Ve(i, r), t = Wt(e.bounds, n));
				var o = e.minzoom || 0,
					n = e.maxzoom || 22,
					n = bd({
						extent: Fd(r),
						maxZoom: n,
						minZoom: o
					});
				this.tileGrid = n, this.template_ = e.template;
				var s, o = e.grids;
				o ? (this.tileUrlFunction_ = rf(o, n), void 0 !== e.attribution && (s = void 0 !== t ?
					t : i.getExtent(), this.setAttributions(function(t) {
						return zt(s, t.extent) ? [e.attribution] : null
					})), this.setState(bs)) : this.setState(Ps)
			}, ry.prototype.getTile = function(t, e, i, r, o) {
				var n = fd(t, e, i);
				if (this.tileCache.containsKey(n)) return this.tileCache.get(n);
				e = [t, e, i], i = this.getTileCoordForTileUrlFunction(e, o), o = this.tileUrlFunction_(
					i, r, o), e = new ty(e, void 0 !== o ? Bn.IDLE : Bn.EMPTY, void 0 !== o ? o :
					"", this.tileGrid.getTileCoordExtent(e), this.preemptive_, this.jsonp_);
				return this.tileCache.set(n, e), e
			}, ry.prototype.useTile = function(t, e, i) {
				i = fd(t, e, i);
				this.tileCache.containsKey(i) && this.tileCache.get(i)
			}, ry),
			ey = ((qg = ad) && (iy.__proto__ = qg), ((iy.prototype = Object.create(qg && qg.prototype))
				.constructor = iy).prototype.disposeInternal = function() {
				this.state = Bn.ABORT, this.changed(), this.interimTile && this.interimTile.dispose();
				for (var t = 0, e = this.tileKeys.length; t < e; ++t) {
					var i = this.tileKeys[t],
						r = this.getTile(i);
					r.consumers--, 0 == r.consumers && (delete this.sourceTiles_[i], r.dispose())
				}
				this.tileKeys.length = 0, this.sourceTiles_ = null, this.loadListenerKeys_.forEach(S),
					this.loadListenerKeys_.length = 0, this.sourceTileListenerKeys_.forEach(S), this
					.sourceTileListenerKeys_.length = 0, qg.prototype.disposeInternal.call(this)
			}, iy.prototype.getContext = function(t) {
				t = ct(t);
				return t in this.context_ || (this.context_[t] = ds()), this.context_[t]
			}, iy.prototype.getImage = function(t) {
				return -1 == this.getReplayState(t).renderedTileRevision ? null : this.getContext(t)
					.canvas
			}, iy.prototype.getReplayState = function(t) {
				t = ct(t);
				return t in this.replayState_ || (this.replayState_[t] = {
					dirty: !1,
					renderedRenderOrder: null,
					renderedRevision: -1,
					renderedTileRevision: -1
				}), this.replayState_[t]
			}, iy.prototype.getKey = function() {
				return this.tileKeys.join("/") + "-" + this.sourceRevision_
			}, iy.prototype.getTile = function(t) {
				return this.sourceTiles_[t]
			}, iy.prototype.load = function() {
				var o = 0,
					n = {};
				this.state == Bn.IDLE && this.setState(Bn.LOADING), this.state == Bn.LOADING && this
					.tileKeys.forEach(function(t) {
						var r = this.getTile(t);
						r.state == Bn.IDLE && (r.setLoader(this.loader_), r.load()), r.state == Bn
							.LOADING && (t = E(r, A.CHANGE, function(t) {
								var e, i = r.getState();
								i != Bn.LOADED && i != Bn.ERROR || (e = ct(r), i == Bn
									.ERROR ? n[e] = !0 : (--o, delete n[e]), o - Object
									.keys(n).length == 0 && this.finishLoading_())
							}.bind(this)), this.loadListenerKeys_.push(t), ++o)
					}.bind(this)), o - Object.keys(n).length == 0 && setTimeout(this.finishLoading_
						.bind(this), 0)
			}, iy.prototype.finishLoading_ = function() {
				for (var t = this.tileKeys.length, e = 0, i = t - 1; 0 <= i; --i) {
					var r = this.getTile(this.tileKeys[i]).getState();
					r != Bn.LOADED && --t, r == Bn.EMPTY && ++e
				}
				t == this.tileKeys.length ? (this.loadListenerKeys_.forEach(S), this.loadListenerKeys_
					.length = 0, this.setState(Bn.LOADED)) : this.setState(e == this.tileKeys
					.length ? Bn.EMPTY : Bn.ERROR)
			}, iy);

		function iy(t, e, i, o, n, r, s, a, h, l, u, p, c, d, _) {
			if (qg.call(this, t, e, {
					transition: 0
				}), this.context_ = {}, this.loader_, this.replayState_ = {}, this.sourceTiles_ = l, this
				.tileKeys = [], this.extent = null, this.sourceRevision_ = i, this.wrappedTileCoord = r,
				this.loadListenerKeys_ = [], this.sourceTileListenerKeys_ = [], r) {
				var f = this.extent = h.getTileCoordExtent(r),
					g = h.getResolution(_),
					y = a.getZForResolution(g),
					m = _ != t[0],
					v = 0;
				if (a.forEachTileCoord(f, y, function(t) {
						var e, i = jt(f, a.getTileCoordExtent(t)),
							r = a.getExtent();
						r && (i = jt(i, r, i)), .5 <= Bt(i) / g && .5 <= kt(i) / g && (++v, e = t
							.toString(), (r = l[e]) || m || (i = s(t, u, p), r = l[e] = new c(t,
									null == i ? Bn.EMPTY : Bn.IDLE, null == i ? "" : i, o, n), this
								.sourceTileListenerKeys_.push(E(r, A.CHANGE, d))), !r || m && r
							.getState() != Bn.LOADED || (r.consumers++, this.tileKeys.push(e)))
					}.bind(this)), m && v == this.tileKeys.length && this.finishLoading_(), _ <= t[0] &&
					this.state != Bn.LOADED)
					for (; _ > h.getMinZoom();) {
						var x = new iy(t, e, i, o, n, r, s, a, h, l, u, p, c, L, --_);
						if (x.state == Bn.LOADED) {
							this.interimTile = x;
							break
						}
					}
			}
		}

		function ry(t) {
			var e;
			Jg.call(this, {
					projection: ke("EPSG:3857"),
					state: Ls
				}), this.preemptive_ = void 0 === t.preemptive || t.preemptive, this.tileUrlFunction_ = nf,
				this.template_ = void 0, this.jsonp_ = t.jsonp || !1, t.url ? this.jsonp_ ? af(t.url, this
					.handleTileJSONResponse.bind(this), this.handleTileJSONError.bind(this)) : ((e =
						new XMLHttpRequest).addEventListener("load", this.onXHRLoad_.bind(this)), e
					.addEventListener("error", this.onXHRError_.bind(this)), e.open("GET", t.url), e.send()
					) : t.tileJSON ? this.handleTileJSONResponse(t.tileJSON) : $(!1, 51)
		}

		function oy(t, e, i, r, o, n) {
			Qg.call(this, t, e), this.src_ = i, this.extent_ = r, this.preemptive_ = o, this.grid_ = null,
				this.keys_ = null, this.data_ = null, this.jsonp_ = n
		}

		function ny(t) {
			var e = t || {},
				i = e.params || {},
				t = !("TRANSPARENT" in i) || i.TRANSPARENT;
			$g.call(this, {
					attributions: e.attributions,
					cacheSize: e.cacheSize,
					crossOrigin: e.crossOrigin,
					opaque: !t,
					projection: e.projection,
					reprojectionErrorThreshold: e.reprojectionErrorThreshold,
					tileClass: e.tileClass,
					tileGrid: e.tileGrid,
					tileLoadFunction: e.tileLoadFunction,
					tileUrlFunction: Zg,
					url: e.url,
					urls: e.urls,
					wrapX: void 0 === e.wrapX || e.wrapX,
					transition: e.transition
				}), this.gutter_ = void 0 !== e.gutter ? e.gutter : 0, this.params_ = i, this.v13_ = !0,
				this.serverType_ = e.serverType, this.hidpi_ = void 0 === e.hidpi || e.hidpi, this
				.tmpExtent_ = [1 / 0, 1 / 0, -1 / 0, -1 / 0], this.updateV13_(), this.setKey(this
					.getKeyForParams_())
		}

		function sy(t, e) {
			e = e_(e, t.getFormat(), t.onLoad.bind(t), t.onError.bind(t));
			t.setLoader(e)
		}
		var ay, hy, ly, uy = [0, 0, 4096, 4096],
			py = ((ly = ad) && (fy.__proto__ = ly), ((fy.prototype = Object.create(ly && ly.prototype))
				.constructor = fy).prototype.disposeInternal = function() {
				this.features_ = null, this.replayGroups_ = {}, this.state = Bn.ABORT, this.changed(),
					ly.prototype.disposeInternal.call(this)
			}, fy.prototype.getExtent = function() {
				return this.extent_ || uy
			}, fy.prototype.getFormat = function() {
				return this.format_
			}, fy.prototype.getFeatures = function() {
				return this.features_
			}, fy.prototype.getKey = function() {
				return this.url_
			}, fy.prototype.getProjection = function() {
				return this.projection_
			}, fy.prototype.getReplayGroup = function(t, e) {
				return this.replayGroups_[ct(t) + "," + e]
			}, fy.prototype.load = function() {
				this.state == Bn.IDLE && (this.setState(Bn.LOADING), this.tileLoadFunction_(this, this
					.url_), this.loader_(null, NaN, null))
			}, fy.prototype.onLoad = function(t, e, i) {
				this.setProjection(e), this.setFeatures(t), this.setExtent(i)
			}, fy.prototype.onError = function() {
				this.setState(Bn.ERROR)
			}, fy.prototype.setExtent = function(t) {
				this.extent_ = t
			}, fy.prototype.setFeatures = function(t) {
				this.features_ = t, this.setState(Bn.LOADED)
			}, fy.prototype.setProjection = function(t) {
				this.projection_ = t
			}, fy.prototype.setReplayGroup = function(t, e, i) {
				this.replayGroups_[ct(t) + "," + e] = i
			}, fy.prototype.setLoader = function(t) {
				this.loader_ = t
			}, fy),
			xu = ((hy = gf) && (_y.__proto__ = hy), ((_y.prototype = Object.create(hy && hy.prototype))
				.constructor = _y).prototype.getOverlaps = function() {
				return this.overlaps_
			}, _y.prototype.clear = function() {
				this.tileCache.clear(), this.sourceTiles_ = {}
			}, _y.prototype.getTile = function(t, e, i, r, o) {
				var n = fd(t, e, i);
				if (this.tileCache.containsKey(n)) return this.tileCache.get(n);
				e = [t, e, i], i = this.getTileCoordForTileUrlFunction(e, o), e = new ey(e, null !== i ?
					Bn.IDLE : Bn.EMPTY, this.getRevision(), this.format_, this.tileLoadFunction, i,
					this.tileUrlFunction, this.tileGrid, this.getTileGridForProjection(o), this
					.sourceTiles_, r, o, this.tileClass, this.handleTileChange.bind(this), e[0]);
				return this.tileCache.set(n, e), e
			}, _y.prototype.getTileGridForProjection = function(t) {
				var e, i = t.getCode(),
					r = this.tileGrids_[i];
				return r || (e = this.tileGrid, r = this.tileGrids_[i] = Md(t, void 0, e ? e
					.getTileSize(e.getMinZoom()) : void 0)), r
			}, _y.prototype.getTilePixelRatio = function(t) {
				return t
			}, _y.prototype.getTilePixelSize = function(t, e, i) {
				t = Ds(this.getTileGridForProjection(i).getTileSize(t), this.tmpSize);
				return [Math.round(t[0] * e), Math.round(t[1] * e)]
			}, _y),
			cy = {
				KVP: "KVP",
				REST: "REST"
			},
			Eu = ((ay = w) && (dy.__proto__ = ay), ((dy.prototype = Object.create(ay && ay.prototype))
				.constructor = dy).prototype.setUrls = function(t) {
				var e = (this.urls = t).join("\n");
				this.setTileUrlFunction( of (t.map(gy.bind(this))), e)
			}, dy.prototype.getDimensions = function() {
				return this.dimensions_
			}, dy.prototype.getFormat = function() {
				return this.format_
			}, dy.prototype.getLayer = function() {
				return this.layer_
			}, dy.prototype.getMatrixSet = function() {
				return this.matrixSet_
			}, dy.prototype.getRequestEncoding = function() {
				return this.requestEncoding_
			}, dy.prototype.getStyle = function() {
				return this.style_
			}, dy.prototype.getVersion = function() {
				return this.version_
			}, dy.prototype.getKeyForDimensions_ = function() {
				var t, e = 0,
					i = [];
				for (t in this.dimensions_) i[e++] = t + "-" + this.dimensions_[t];
				return i.join("/")
			}, dy.prototype.updateDimensions = function(t) {
				y(this.dimensions_, t), this.setKey(this.getKeyForDimensions_())
			}, dy);

		function dy(t) {
			var e = void 0 !== t.requestEncoding ? t.requestEncoding : cy.KVP,
				i = t.tileGrid,
				r = t.urls;
			void 0 === r && void 0 !== t.url && (r = sf(t.url)), ay.call(this, {
					attributions: t.attributions,
					cacheSize: t.cacheSize,
					crossOrigin: t.crossOrigin,
					projection: t.projection,
					reprojectionErrorThreshold: t.reprojectionErrorThreshold,
					tileClass: t.tileClass,
					tileGrid: i,
					tileLoadFunction: t.tileLoadFunction,
					tilePixelRatio: t.tilePixelRatio,
					tileUrlFunction: nf,
					urls: r,
					wrapX: void 0 !== t.wrapX && t.wrapX,
					transition: t.transition
				}), this.version_ = void 0 !== t.version ? t.version : "1.0.0", this.format_ = void 0 !== t
				.format ? t.format : "image/jpeg", this.dimensions_ = void 0 !== t.dimensions ? t
				.dimensions : {}, this.layer_ = t.layer, this.matrixSet_ = t.matrixSet, this.style_ = t
				.style, this.requestEncoding_ = e, this.setKey(this.getKeyForDimensions_()), r && 0 < r
				.length && (this.tileUrlFunction = of (r.map(gy.bind(this))))
		}

		function _y(t) {
			var e = t.projection || "EPSG:3857",
				i = t.extent || Fd(e),
				i = t.tileGrid || bd({
					extent: i,
					maxZoom: t.maxZoom || 22,
					minZoom: t.minZoom,
					tileSize: t.tileSize || 512
				});
			hy.call(this, {
					attributions: t.attributions,
					cacheSize: void 0 !== t.cacheSize ? t.cacheSize : 128,
					opaque: !1,
					projection: e,
					state: t.state,
					tileGrid: i,
					tileLoadFunction: t.tileLoadFunction || sy,
					tileUrlFunction: t.tileUrlFunction,
					url: t.url,
					urls: t.urls,
					wrapX: void 0 === t.wrapX || t.wrapX,
					transition: t.transition
				}), this.format_ = t.format || null, this.sourceTiles_ = {}, this.overlaps_ = null == t
				.overlaps || t.overlaps, this.tileClass = t.tileClass || py, this.tileGrids_ = {}
		}

		function fy(t, e, i, r, o, n) {
			ly.call(this, t, e, n), this.consumers = 0, this.extent_ = null, this.format_ = r, this
				.features_ = null, this.loader_, this.projection_ = null, this.replayGroups_ = {}, this
				.tileLoadFunction_ = o, this.url_ = i
		}

		function gy(o) {
			var n = this.requestEncoding_,
				i = {
					layer: this.layer_,
					style: this.style_,
					tilematrixset: this.matrixSet_
				};
			n == cy.KVP && y(i, {
				Service: "WMTS",
				Request: "GetTile",
				Version: this.version_,
				Format: this.format_
			}), o = n == cy.KVP ? Qf(o, i) : o.replace(/\{(\w+?)\}/g, function(t, e) {
				return e.toLowerCase() in i ? i[e.toLowerCase()] : t
			});
			var s = this.tileGrid,
				a = this.dimensions_;
			return function(t, e, i) {
				if (t) {
					var r = {
						TileMatrix: s.getMatrixId(t[0]),
						TileCol: t[1],
						TileRow: -t[2] - 1
					};
					y(r, a);
					t = o;
					return n == cy.KVP ? Qf(t, r) : t.replace(/\{(\w+?)\}/g, function(t, e) {
						return r[e]
					})
				}
			}
		}
		var yy, my, vy = "default",
			xy = "truncated",
			Ey = ((my = cd) && (Cy.__proto__ = my), ((Cy.prototype = Object.create(my && my.prototype))
				.constructor = Cy).prototype.getImage = function() {
				if (this.zoomifyImage_) return this.zoomifyImage_;
				var t = my.prototype.getImage.call(this);
				if (this.state != Bn.LOADED) return t;
				var e = this.tileSize_;
				if (t.width == e[0] && t.height == e[1]) return this.zoomifyImage_ = t;
				e = ds(e[0], e[1]);
				return e.drawImage(t, 0, 0), this.zoomifyImage_ = e.canvas, e.canvas
			}, Cy),
			Su = ((yy = w) && (Sy.__proto__ = yy), (Sy.prototype = Object.create(yy && yy.prototype))
				.constructor = Sy);

		function Sy(t) {
			var e = t || {},
				i = e.size,
				r = void 0 !== e.tierSizeCalculation ? e.tierSizeCalculation : vy,
				o = i[0],
				n = i[1],
				t = e.extent || [0, -i[1], i[0], 0],
				l = [],
				i = e.tileSize || Jn,
				s = i;
			switch (r) {
				case vy:
					for (; s < o || s < n;) l.push([Math.ceil(o / s), Math.ceil(n / s)]), s += s;
					break;
				case xy:
					for (var a = o, h = n; s < a || s < h;) l.push([Math.ceil(a / s), Math.ceil(h / s)]),
						a >>= 1, h >>= 1;
					break;
				default:
					$(!1, 53)
			}
			l.push([1, 1]), l.reverse();
			for (var u = [1], p = [0], c = 1, d = l.length; c < d; c++) u.push(1 << c), p.push(l[c - 1][0] *
				l[c - 1][1] + p[c - 1]);
			u.reverse();
			var _ = new Id({
					tileSize: i,
					extent: t,
					origin: Ut(t),
					resolutions: u
				}),
				i = e.url;
			i && -1 == i.indexOf("{TileGroup}") && -1 == i.indexOf("{tileIndex}") && (i +=
				"{TileGroup}/{z}-{x}-{y}.jpg");
			t = of (sf(i).map(function(h) {
				return function(t, e, i) {
					if (t) {
						var r = t[0],
							o = t[1],
							n = -t[2] - 1,
							s = o + n * l[r][0],
							t = _.getTileSize(r),
							t = Array.isArray(t) ? t[0] : t,
							a = {
								z: r,
								x: o,
								y: n,
								tileIndex: s,
								TileGroup: "TileGroup" + ((s + p[r]) / t | 0)
							};
						return h.replace(/\{(\w+?)\}/g, function(t, e) {
							return a[e]
						})
					}
				}
			})), i = Ey.bind(null, _);
			yy.call(this, {
				attributions: e.attributions,
				cacheSize: e.cacheSize,
				crossOrigin: e.crossOrigin,
				projection: e.projection,
				reprojectionErrorThreshold: e.reprojectionErrorThreshold,
				tileClass: i,
				tileGrid: _,
				tileUrlFunction: t,
				transition: e.transition
			})
		}

		function Cy(t, e, i, r, o, n, s) {
			my.call(this, e, i, r, o, n, s), this.zoomifyImage_ = null, this.tileSize_ = Ds(t.getTileSize(e[
				0]))
		}
		var wy, Ty = "renderOrder",
			vu = ((wy = $s) && (Ry.__proto__ = wy), ((Ry.prototype = Object.create(wy && wy.prototype))
				.constructor = Ry).prototype.getDeclutter = function() {
				return this.declutter_
			}, Ry.prototype.setDeclutter = function(t) {
				this.declutter_ = t
			}, Ry.prototype.getRenderBuffer = function() {
				return this.renderBuffer_
			}, Ry.prototype.getRenderOrder = function() {
				return this.get(Ty)
			}, Ry.prototype.getStyle = function() {
				return this.style_
			}, Ry.prototype.getStyleFunction = function() {
				return this.styleFunction_
			}, Ry.prototype.getUpdateWhileAnimating = function() {
				return this.updateWhileAnimating_
			}, Ry.prototype.getUpdateWhileInteracting = function() {
				return this.updateWhileInteracting_
			}, Ry.prototype.setRenderOrder = function(t) {
				this.set(Ty, t)
			}, Ry.prototype.setStyle = function(t) {
				var e;
				this.style_ = void 0 !== t ? t : Q_, this.styleFunction_ = null === t ? void 0 :
					"function" == typeof(t = this.style_) ? t : (e = Array.isArray(t) ? t : ($(
						"function" == typeof t.getZIndex, 41), [t]), function() {
						return e
					}), this.changed()
			}, Ry.prototype.getRenderMode = function() {
				return this.renderMode_
			}, Ry);

		function Ry(t) {
			var e = t || {},
				t = y({}, e);
			delete t.style, delete t.renderBuffer, delete t.updateWhileAnimating, delete t
				.updateWhileInteracting, wy.call(this, t), this.declutter_ = void 0 !== e.declutter && e
				.declutter, this.renderBuffer_ = void 0 !== e.renderBuffer ? e.renderBuffer : 100, this
				.style_ = null, this.styleFunction_ = void 0, this.setStyle(e.style), this
				.updateWhileAnimating_ = void 0 !== e.updateWhileAnimating && e.updateWhileAnimating, this
				.updateWhileInteracting_ = void 0 !== e.updateWhileInteracting && e.updateWhileInteracting,
				this.renderMode_ = e.renderMode || Vh, this.type = zh.VECTOR
		}
		vu.prototype.getSource;
		var Iy, Ly, by = vu,
			Py = "blur",
			My = "gradient",
			Fy = "radius",
			Oy = ["#00f", "#0ff", "#0f0", "#ff0", "#f00"],
			Pu = ((Ly = by) && (Ny.__proto__ = Ly), ((Ny.prototype = Object.create(Ly && Ly.prototype))
				.constructor = Ny).prototype.createCircle_ = function() {
				var t = this.getRadius(),
					e = this.getBlur(),
					i = t + e + 1,
					r = 2 * i,
					r = ds(r, r);
				r.shadowOffsetX = r.shadowOffsetY = this.shadow_, r.shadowBlur = e, r.shadowColor =
					"#000", r.beginPath();
				i -= this.shadow_;
				return r.arc(i, i, t, 0, 2 * Math.PI, !0), r.fill(), r.canvas.toDataURL()
			}, Ny.prototype.getBlur = function() {
				return this.get(Py)
			}, Ny.prototype.getGradient = function() {
				return this.get(My)
			}, Ny.prototype.getRadius = function() {
				return this.get(Fy)
			}, Ny.prototype.handleGradientChanged_ = function() {
				this.gradient_ = function(t) {
					for (var e = ds(1, 256), i = e.createLinearGradient(0, 0, 1, 256), r = 1 / (t
							.length - 1), o = 0, n = t.length; o < n; ++o) i.addColorStop(o * r, t[
						o]);
					return e.fillStyle = i, e.fillRect(0, 0, 1, 256), e.getImageData(0, 0, 1, 256)
						.data
				}(this.getGradient())
			}, Ny.prototype.handleStyleChanged_ = function() {
				this.circleImage_ = this.createCircle_(), this.styleCache_ = new Array(256), this
					.changed()
			}, Ny.prototype.handleRender_ = function(t) {
				for (var e = t.context, t = e.canvas, t = e.getImageData(0, 0, t.width, t.height), i = t
						.data, r = 0, o = i.length; r < o; r += 4) {
					var n = 4 * i[r + 3];
					n && (i[r] = this.gradient_[n], i[r + 1] = this.gradient_[1 + n], i[r + 2] = this
						.gradient_[2 + n])
				}
				e.putImageData(t, 0, 0)
			}, Ny.prototype.setBlur = function(t) {
				this.set(Py, t)
			}, Ny.prototype.setGradient = function(t) {
				this.set(My, t)
			}, Ny.prototype.setRadius = function(t) {
				this.set(Fy, t)
			}, Ny),
			Dl = ((Iy = by) && (Ay.__proto__ = Iy), ((Ay.prototype = Object.create(Iy && Iy.prototype))
				.constructor = Ay).prototype.getPreload = function() {
				return this.get(Sg)
			}, Ay.prototype.getUseInterimTilesOnError = function() {
				return this.get(Cg)
			}, Ay.prototype.setPreload = function(t) {
				this.set(Sg, t)
			}, Ay.prototype.setUseInterimTilesOnError = function(t) {
				this.set(Cg, t)
			}, Ay);

		function Ay(t) {
			var e = t || {},
				t = e.renderMode || Ku;
			$(null == t || t == Wu || t == Ku || t == Hu, 28), e.declutter && t == Wu && (t = Ku), e
				.renderMode = t;
			t = y({}, e);
			delete t.preload, delete t.useInterimTilesOnError, Iy.call(this, t), this.setPreload(e
				.preload || 0), this.setUseInterimTilesOnError(void 0 === e.useInterimTilesOnError || e
				.useInterimTilesOnError), this.type = zh.VECTOR_TILE
		}

		function Ny(t) {
			var e = t || {},
				t = y({}, e);
			delete t.gradient, delete t.radius, delete t.blur, delete t.shadow, delete t.weight, Ly.call(
					this, t), this.gradient_ = null, this.shadow_ = void 0 !== e.shadow ? e.shadow : 250,
				this.circleImage_ = void 0, this.styleCache_ = null, E(this, z(My), this
					.handleGradientChanged_, this), this.setGradient(e.gradient || Oy), this.setBlur(
					void 0 !== e.blur ? e.blur : 15), this.setRadius(void 0 !== e.radius ? e.radius : 8), E(
					this, z(Py), this.handleStyleChanged_, this), E(this, z(Fy), this.handleStyleChanged_,
					this), this.handleStyleChanged_();
			var i = e.weight || "weight",
				o = "string" == typeof i ? function(t) {
					return t.get(i)
				} : i;
			this.setStyle(function(t, e) {
				var i = o(t),
					r = void 0 !== i ? Jt(i, 0, 1) : 1,
					t = 255 * r | 0,
					i = this.styleCache_[t];
				return i || (i = [new ef({
					image: new H_({
						opacity: r,
						src: this.circleImage_
					})
				})], this.styleCache_[t] = i), i
			}.bind(this)), this.setRenderOrder(null), E(this, qr, this.handleRender_, this)
		}
		Dl.prototype.getSource;
		var Gy, Lp = Dl,
			Dy = ((Gy = F) && (ky.__proto__ = Gy), (ky.prototype = Object.create(Gy && Gy.prototype))
				.constructor = ky);

		function ky(t, e, i, r) {
			Gy.call(this, t), this.features = i, this.file = e, this.projection = r
		}

		function jy(t) {
			for (var e = t.dataTransfer.files, i = 0, r = e.length; i < r; ++i) {
				var o = e.item(i),
					n = new FileReader;
				n.addEventListener(A.LOAD, this.handleResult_.bind(this, o)), n.readAsText(o)
			}
		}

		function Uy(t) {
			t.stopPropagation(), t.preventDefault(), t.dataTransfer.dropEffect = "copy"
		}
		var Yy, By, zy, Mp = ((zy = xa) && (Wy.__proto__ = zy), ((Wy.prototype = Object.create(zy && zy
				.prototype)).constructor = Wy).prototype.handleResult_ = function(t, e) {
				for (var i = e.target.result, e = this.getMap(), r = (r = this.projection_) || e
						.getView().getProjection(), o = this.formatConstructors_, n = [], s = 0, a = o
						.length; s < a; ++s) {
					var h = new o[s];
					if ((n = this.tryReadFeatures_(h, i, {
							featureProjection: r
						})) && 0 < n.length) break
				}
				this.source_ && (this.source_.clear(), this.source_.addFeatures(n)), this.dispatchEvent(
					new Dy("addfeatures", t, n, r))
			}, Wy.prototype.registerListeners_ = function() {
				var t = this.getMap();
				t && (t = this.target || t.getViewport(), this.dropListenKeys_ = [E(t, A.DROP, jy,
					this), E(t, A.DRAGENTER, Uy, this), E(t, A.DRAGOVER, Uy, this), E(t, A.DROP,
						Uy, this)
				])
			}, Wy.prototype.setActive = function(t) {
				zy.prototype.setActive.call(this, t), t ? this.registerListeners_() : this
					.unregisterListeners_()
			}, Wy.prototype.setMap = function(t) {
				this.unregisterListeners_(), zy.prototype.setMap.call(this, t), this.getActive() && this
					.registerListeners_()
			}, Wy.prototype.tryReadFeatures_ = function(t, e, i) {
				try {
					return t.readFeatures(e, i)
				} catch (t) {
					return null
				}
			}, Wy.prototype.unregisterListeners_ = function() {
				this.dropListenKeys_ && (this.dropListenKeys_.forEach(S), this.dropListenKeys_ = null)
			}, Wy),
			Kp = ((By = Wa) && (Vy.__proto__ = By), ((Vy.prototype = Object.create(By && By.prototype))
				.constructor = Vy).prototype.handleDragEvent = function(t) {
				var e, i, r;
				Ga(t) && (i = (r = t.map).getSize(), t = (e = t.pixel)[0] - i[0] / 2, i = i[1] / 2 - e[
						1], e = Math.atan2(i, t), t = Math.sqrt(t * t + i * i), (i = r.getView())
					.getConstraints().rotation !== ts && void 0 !== this.lastAngle_ && (r = e - this
						.lastAngle_, fa(i, i.getRotation() - r)), this.lastAngle_ = e, void 0 !==
					this.lastMagnitude_ && ma(i, this.lastMagnitude_ * (i.getResolution() / t)),
					void 0 !== this.lastMagnitude_ && (this.lastScaleDelta_ = this.lastMagnitude_ /
						t), this.lastMagnitude_ = t)
			}, Vy.prototype.handleUpEvent = function(t) {
				if (!Ga(t)) return !0;
				var e = t.map.getView();
				e.setHint(1, -1);
				t = this.lastScaleDelta_ - 1;
				return _a(e, e.getRotation()), ga(e, e.getResolution(), void 0, this.duration_, t), this
					.lastScaleDelta_ = 0, !1
			}, Vy.prototype.handleDownEvent = function(t) {
				return !!Ga(t) && !!this.condition_(t) && (t.map.getView().setHint(1, 1), this
					.lastAngle_ = void 0, !(this.lastMagnitude_ = void 0))
			}, Vy),
			T = ((Yy = ci) && (Xy.__proto__ = Yy), ((Xy.prototype = Object.create(Yy && Yy.prototype))
				.constructor = Xy).prototype.clone = function() {
				return new Xy(this.flatCoordinates.slice(), void 0, this.layout)
			}, Xy.prototype.closestPointXY = function(t, e, i, r) {
				var o = this.flatCoordinates,
					n = t - o[0],
					s = e - o[1],
					t = n * n + s * s;
				if (t < r) {
					if (0 == t)
						for (var a = 0; a < this.stride; ++a) i[a] = o[a];
					else {
						e = this.getRadius() / Math.sqrt(t);
						i[0] = o[0] + e * n, i[1] = o[1] + e * s;
						for (var h = 2; h < this.stride; ++h) i[h] = o[h]
					}
					return i.length = this.stride, t
				}
				return r
			}, Xy.prototype.containsXY = function(t, e) {
				var i = this.flatCoordinates,
					t = t - i[0],
					i = e - i[1];
				return t * t + i * i <= this.getRadiusSquared_()
			}, Xy.prototype.getCenter = function() {
				return this.flatCoordinates.slice(0, this.stride)
			}, Xy.prototype.computeExtent = function(t) {
				var e = this.flatCoordinates,
					i = e[this.stride] - e[0];
				return wt(e[0] - i, e[1] - i, e[0] + i, e[1] + i, t)
			}, Xy.prototype.getRadius = function() {
				return Math.sqrt(this.getRadiusSquared_())
			}, Xy.prototype.getRadiusSquared_ = function() {
				var t = this.flatCoordinates[this.stride] - this.flatCoordinates[0],
					e = this.flatCoordinates[this.stride + 1] - this.flatCoordinates[1];
				return t * t + e * e
			}, Xy.prototype.getType = function() {
				return Ht.CIRCLE
			}, Xy.prototype.intersectsExtent = function(t) {
				if (zt(t, this.getExtent())) {
					var e = this.getCenter();
					return t[0] <= e[0] && t[2] >= e[0] || t[1] <= e[1] && t[3] >= e[1] || Ft(t, this
						.intersectsCoordinate, this)
				}
				return !1
			}, Xy.prototype.setCenter = function(t) {
				var e = this.stride,
					i = this.flatCoordinates[e] - this.flatCoordinates[0],
					r = t.slice();
				r[e] = r[0] + i;
				for (var o = 1; o < e; ++o) r[e + o] = t[o];
				this.setFlatCoordinates(this.layout, r), this.changed()
			}, Xy.prototype.setCenterAndRadius = function(t, e, i) {
				this.setLayout(i, t, 0), this.flatCoordinates || (this.flatCoordinates = []);
				var r = this.flatCoordinates,
					o = Ei(r, 0, t, this.stride);
				r[o++] = r[0] + e;
				for (var n = 1, s = this.stride; n < s; ++n) r[o++] = r[n];
				r.length = o, this.changed()
			}, Xy.prototype.getCoordinates = function() {
				return null
			}, Xy.prototype.setCoordinates = function(t, e) {}, Xy.prototype.setRadius = function(t) {
				this.flatCoordinates[this.stride] = this.flatCoordinates[0] + t, this.changed()
			}, Xy);

		function Xy(t, e, i) {
			Yy.call(this), void 0 !== i && void 0 === e ? this.setFlatCoordinates(i, t) : (e = e || 0, this
				.setCenterAndRadius(t, e, i))
		}

		function Vy(t) {
			t = t || {};
			By.call(this, t), this.condition_ = t.condition || Aa, this.lastAngle_ = void 0, this
				.lastMagnitude_ = void 0, this.lastScaleDelta_ = 0, this.duration_ = void 0 !== t.duration ?
				t.duration : 400
		}

		function Wy(t) {
			t = t || {};
			zy.call(this, {
					handleEvent: R
				}), this.formatConstructors_ = t.formatConstructors || [], this.projection_ = t.projection ?
				ke(t.projection) : null, this.dropListenKeys_ = null, this.source_ = t.source || null, this
				.target = t.target || null
		}
		T.prototype.transform;
		var Ky, Hy, Zy = T,
			qy = ((Hy = ci) && ($y.__proto__ = Hy), (($y.prototype = Object.create(Hy && Hy.prototype))
				.constructor = $y).prototype.appendLineString = function(t) {
				this.flatCoordinates ? st(this.flatCoordinates, t.getFlatCoordinates().slice()) : this
					.flatCoordinates = t.getFlatCoordinates().slice(), this.ends_.push(this
						.flatCoordinates.length), this.changed()
			}, $y.prototype.clone = function() {
				return new $y(this.flatCoordinates.slice(), this.layout, this.ends_.slice())
			}, $y.prototype.closestPointXY = function(t, e, i, r) {
				return r < mt(this.getExtent(), t, e) ? r : (this.maxDeltaRevision_ != this
				.getRevision() && (this.maxDelta_ = Math.sqrt(mi(this.flatCoordinates, 0, this
					.ends_, this.stride, 0)), this.maxDeltaRevision_ = this.getRevision()), xi(
					this.flatCoordinates, 0, this.ends_, this.stride, this.maxDelta_, !1, t, e,
					i, r))
			}, $y.prototype.getCoordinateAtM = function(t, e, i) {
				if (this.layout != Kt.XYM && this.layout != Kt.XYZM || 0 === this.flatCoordinates
					.length) return null;
				var e = void 0 !== e && e,
					u = void 0 !== i && i;
				return function(t, e, i, r, o, n) {
					if (u) return Br(t, e, i[i.length - 1], r, o, n);
					var s;
					if (o < t[r - 1]) return n ? ((s = t.slice(0, r))[r - 1] = o, s) : null;
					if (t[t.length - 1] < o) return n ? ((s = t.slice(t.length - r))[r - 1] = o,
						s) : null;
					for (var a = 0, h = i.length; a < h; ++a) {
						var l = i[a];
						if (e != l) {
							if (o < t[e + r - 1]) return null;
							if (o <= t[l - 1]) return Br(t, e, l, r, o, !1);
							e = l
						}
					}
					return null
				}(this.flatCoordinates, 0, this.ends_, this.stride, t, e)
			}, $y.prototype.getCoordinates = function() {
				return Ti(this.flatCoordinates, 0, this.ends_, this.stride)
			}, $y.prototype.getEnds = function() {
				return this.ends_
			}, $y.prototype.getLineString = function(t) {
				return t < 0 || this.ends_.length <= t ? null : new Vr(this.flatCoordinates.slice(0 ===
					t ? 0 : this.ends_[t - 1], this.ends_[t]), this.layout)
			}, $y.prototype.getLineStrings = function() {
				for (var t = this.flatCoordinates, e = this.ends_, i = this.layout, r = [], o = 0, n =
						0, s = e.length; n < s; ++n) {
					var a = e[n],
						h = new Vr(t.slice(o, a), i);
					r.push(h), o = a
				}
				return r
			}, $y.prototype.getFlatMidpoints = function() {
				for (var t = [], e = this.flatCoordinates, i = 0, r = this.ends_, o = this.stride, n =
						0, s = r.length; n < s; ++n) {
					var a = r[n];
					st(t, Yr(e, i, a, o, .5)), i = a
				}
				return t
			}, $y.prototype.getSimplifiedGeometryInternal = function(t) {
				var e = [],
					i = [];
				return e.length = function(t, e, i, r, o, n, s, a) {
					for (var h = 0, l = i.length; h < l; ++h) {
						var u = i[h];
						s = Ii(t, e, u, r, o, n, s), a.push(s), e = u
					}
					return s
				}(this.flatCoordinates, 0, this.ends_, this.stride, t, e, 0, i), new $y(e, Kt.XY, i)
			}, $y.prototype.getType = function() {
				return Ht.MULTI_LINE_STRING
			}, $y.prototype.intersectsExtent = function(t) {
				return function(t, e, i, r, o) {
					for (var n = 0, s = i.length; n < s; ++n) {
						if (Yi(t, e, i[n], r, o)) return !0;
						e = i[n]
					}
					return !1
				}(this.flatCoordinates, 0, this.ends_, this.stride, t)
			}, $y.prototype.setCoordinates = function(t, e) {
				this.setLayout(e, t, 2), this.flatCoordinates || (this.flatCoordinates = []);
				t = Ci(this.flatCoordinates, 0, t, this.stride, this.ends_);
				this.flatCoordinates.length = 0 === t.length ? 0 : t[t.length - 1], this.changed()
			}, $y),
			Jy = ((Ky = ci) && (Qy.__proto__ = Ky), ((Qy.prototype = Object.create(Ky && Ky.prototype))
				.constructor = Qy).prototype.appendPoint = function(t) {
				this.flatCoordinates ? st(this.flatCoordinates, t.getFlatCoordinates()) : this
					.flatCoordinates = t.getFlatCoordinates().slice(), this.changed()
			}, Qy.prototype.clone = function() {
				return new Qy(this.flatCoordinates.slice(), this.layout)
			}, Qy.prototype.closestPointXY = function(t, e, i, r) {
				if (r < mt(this.getExtent(), t, e)) return r;
				for (var o = this.flatCoordinates, n = this.stride, s = 0, a = o.length; s < a; s +=
					n) {
					var h = te(t, e, o[s], o[s + 1]);
					if (h < r) {
						r = h;
						for (var l = 0; l < n; ++l) i[l] = o[s + l];
						i.length = n
					}
				}
				return r
			}, Qy.prototype.getCoordinates = function() {
				return wi(this.flatCoordinates, 0, this.flatCoordinates.length, this.stride)
			}, Qy.prototype.getPoint = function(t) {
				var e = this.flatCoordinates ? this.flatCoordinates.length / this.stride : 0;
				return t < 0 || e <= t ? null : new Oi(this.flatCoordinates.slice(t * this.stride, (t +
					1) * this.stride), this.layout)
			}, Qy.prototype.getPoints = function() {
				for (var t = this.flatCoordinates, e = this.layout, i = this.stride, r = [], o = 0, n =
						t.length; o < n; o += i) {
					var s = new Oi(t.slice(o, o + i), e);
					r.push(s)
				}
				return r
			}, Qy.prototype.getType = function() {
				return Ht.MULTI_POINT
			}, Qy.prototype.intersectsExtent = function(t) {
				for (var e = this.flatCoordinates, i = this.stride, r = 0, o = e.length; r < o; r += i)
					if (Et(t, e[r], e[r + 1])) return !0;
				return !1
			}, Qy.prototype.setCoordinates = function(t, e) {
				this.setLayout(e, t, 1), this.flatCoordinates || (this.flatCoordinates = []), this
					.flatCoordinates.length = Si(this.flatCoordinates, 0, t, this.stride), this
					.changed()
			}, Qy);

		function Qy(t, e) {
			Ky.call(this), e && !Array.isArray(t[0]) ? this.setFlatCoordinates(e, t) : this.setCoordinates(
				t, e)
		}

		function $y(t, e, i) {
			if (Hy.call(this), this.ends_ = [], this.maxDelta_ = -1, this.maxDeltaRevision_ = -1, Array
				.isArray(t[0])) this.setCoordinates(t, e);
			else if (void 0 !== e && i) this.setFlatCoordinates(e, t), this.ends_ = i;
			else {
				for (var r = this.getLayout(), o = t, n = [], s = [], a = 0, h = o.length; a < h; ++a) {
					var l = o[a];
					0 === a && (r = l.getLayout()), st(n, l.getFlatCoordinates()), s.push(n.length)
				}
				this.setFlatCoordinates(r, n), this.ends_ = s
			}
		}

		function tm(t, e, i, r) {
			for (var o = [], n = 0, s = i.length; n < s; ++n) {
				var a = i[n],
					h = It(t, e, a[0], r);
				o.push((h[0] + h[2]) / 2, (h[1] + h[3]) / 2), e = a[a.length - 1]
			}
			return o
		}
		var em, im, rm = ((im = ci) && (pm.__proto__ = im), ((pm.prototype = Object.create(im && im
				.prototype)).constructor = pm).prototype.appendPolygon = function(t) {
				var e;
				if (this.flatCoordinates) {
					var i = this.flatCoordinates.length;
					st(this.flatCoordinates, t.getFlatCoordinates());
					for (var r = 0, o = (e = t.getEnds().slice()).length; r < o; ++r) e[r] += i
				} else this.flatCoordinates = t.getFlatCoordinates().slice(), e = t.getEnds().slice(),
					this.endss_.push();
				this.endss_.push(e), this.changed()
			}, pm.prototype.clone = function() {
				for (var t = this.endss_.length, e = new Array(t), i = 0; i < t; ++i) e[i] = this
					.endss_[i].slice();
				return new pm(this.flatCoordinates.slice(), this.layout, e)
			}, pm.prototype.closestPointXY = function(t, e, i, r) {
				return r < mt(this.getExtent(), t, e) ? r : (this.maxDeltaRevision_ != this
				.getRevision() && (this.maxDelta_ = Math.sqrt(function(t, e, i, r, o) {
						for (var n = 0, s = i.length; n < s; ++n) {
							var a = i[n];
							o = mi(t, e, a, r, o), e = a[a.length - 1]
						}
						return o
					}(this.flatCoordinates, 0, this.endss_, this.stride, 0)), this
					.maxDeltaRevision_ = this.getRevision()), function(t, e, i, r, o, n, s, a,
					h) {
					for (var l = [NaN, NaN], u = 0, p = i.length; u < p; ++u) {
						var c = i[u];
						h = xi(t, e, c, r, o, !0, n, s, a, h, l), e = c[c.length - 1]
					}
					return h
				}(this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride, this
					.maxDelta_, t, e, i, r))
			}, pm.prototype.containsXY = function(t, e) {
				return function(t, e, i, r, o, n) {
					if (0 === i.length) return !1;
					for (var s = 0, a = i.length; s < a; ++s) {
						var h = i[s];
						if (Di(t, e, h, r, o, n)) return !0;
						e = h[h.length - 1]
					}
					return !1
				}(this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride, t, e)
			}, pm.prototype.getArea = function() {
				return function(t, e, i, r) {
					for (var o = 0, n = 0, s = i.length; n < s; ++n) {
						var a = i[n];
						o += fi(t, e, a, r), e = a[a.length - 1]
					}
					return o
				}(this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride)
			}, pm.prototype.getCoordinates = function(t) {
				var e;
				return void 0 !== t ? Wi(e = this.getOrientedFlatCoordinates().slice(), 0, this.endss_,
					this.stride, t) : e = this.flatCoordinates, Ri(e, 0, this.endss_, this.stride)
			}, pm.prototype.getEndss = function() {
				return this.endss_
			}, pm.prototype.getFlatInteriorPoints = function() {
				var t;
				return this.flatInteriorPointsRevision_ != this.getRevision() && (t = tm(this
						.flatCoordinates, 0, this.endss_, this.stride), this.flatInteriorPoints_ =
					ji(this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride, t), this
					.flatInteriorPointsRevision_ = this.getRevision()), this.flatInteriorPoints_
			}, pm.prototype.getInteriorPoints = function() {
				return new Jy(this.getFlatInteriorPoints().slice(), Kt.XYM)
			}, pm.prototype.getOrientedFlatCoordinates = function() {
				var t;
				return this.orientedRevision_ != this.getRevision() && (! function(t, e, i) {
							for (var r = 0, o = e.length; r < o; ++r)
								if (!Xi(t, 0, e[r], i, void 0)) return;
							return 1
						}(t = this.flatCoordinates, this.endss_, this.stride) ? (this
							.orientedFlatCoordinates_ = t.slice(), this.orientedFlatCoordinates_
							.length = Wi(this.orientedFlatCoordinates_, 0, this.endss_, this.stride)) :
						this.orientedFlatCoordinates_ = t, this.orientedRevision_ = this.getRevision()),
					this.orientedFlatCoordinates_
			}, pm.prototype.getSimplifiedGeometryInternal = function(t) {
				var e = [],
					i = [];
				return e.length = function(t, e, i, r, o, n, s, a) {
					for (var h = 0, l = i.length; h < l; ++h) {
						var u = i[h],
							p = [];
						s = bi(t, e, u, r, o, n, s, p), a.push(p), e = u[u.length - 1]
					}
					return s
				}(this.flatCoordinates, 0, this.endss_, this.stride, Math.sqrt(t), e, 0, i), new pm(
					e, Kt.XY, i)
			}, pm.prototype.getPolygon = function(t) {
				if (t < 0 || this.endss_.length <= t) return null;
				var e, i;
				i = 0 === t ? 0 : (e = this.endss_[t - 1])[e.length - 1];
				var r = this.endss_[t].slice(),
					t = r[r.length - 1];
				if (0 !== i)
					for (var o = 0, n = r.length; o < n; ++o) r[o] -= i;
				return new Zi(this.flatCoordinates.slice(i, t), this.layout, r)
			}, pm.prototype.getPolygons = function() {
				for (var t = this.layout, e = this.flatCoordinates, i = this.endss_, r = [], o = 0, n =
						0, s = i.length; n < s; ++n) {
					var a = i[n].slice(),
						h = a[a.length - 1];
					if (0 !== o)
						for (var l = 0, u = a.length; l < u; ++l) a[l] -= o;
					var p = new Zi(e.slice(o, h), t, a);
					r.push(p), o = h
				}
				return r
			}, pm.prototype.getType = function() {
				return Ht.MULTI_POLYGON
			}, pm.prototype.intersectsExtent = function(t) {
				return function(t, e, i, r, o) {
					for (var n = 0, s = i.length; n < s; ++n) {
						var a = i[n];
						if (Bi(t, e, a, r, o)) return !0;
						e = a[a.length - 1]
					}
					return !1
				}(this.getOrientedFlatCoordinates(), 0, this.endss_, this.stride, t)
			}, pm.prototype.setCoordinates = function(t, e) {
				this.setLayout(e, t, 3), this.flatCoordinates || (this.flatCoordinates = []);
				t = function(t, e, i, r, o) {
					for (var n = o || [], s = 0, a = 0, h = i.length; a < h; ++a) {
						var l = Ci(t, e, i[a], r, n[s]);
						e = (n[s++] = l)[l.length - 1]
					}
					return n.length = s, n
				}(this.flatCoordinates, 0, t, this.stride, this.endss_);
				0 === t.length ? this.flatCoordinates.length = 0 : (t = t[t.length - 1], this
					.flatCoordinates.length = 0 === t.length ? 0 : t[t.length - 1]), this.changed()
			}, pm),
			om = "Point",
			nm = "LineString",
			sm = "Polygon",
			am = "Circle",
			hm = "drawstart",
			lm = ((em = F) && (um.__proto__ = em), (um.prototype = Object.create(em && em.prototype))
				.constructor = um);

		function um(t, e) {
			em.call(this, t), this.feature = e
		}

		function pm(t, e, i) {
			if (im.call(this), this.endss_ = [], this.flatInteriorPointsRevision_ = -1, this
				.flatInteriorPoints_ = null, this.maxDelta_ = -1, this.maxDeltaRevision_ = -1, this
				.orientedRevision_ = -1, this.orientedFlatCoordinates_ = null, !i && !Array.isArray(t[0])) {
				for (var r = this.getLayout(), o = t, n = [], s = [], a = 0, h = o.length; a < h; ++a) {
					var l = o[a];
					0 === a && (r = l.getLayout());
					for (var u = n.length, p = l.getEnds(), c = 0, d = p.length; c < d; ++c) p[c] += u;
					st(n, l.getFlatCoordinates()), s.push(p)
				}
				e = r, t = n, i = s
			}
			void 0 !== e && i ? (this.setFlatCoordinates(e, t), this.endss_ = i) : this.setCoordinates(t, e)
		}
		var cm, dm, Tc = ((dm = Wa) && (ym.__proto__ = dm), ((ym.prototype = Object.create(dm && dm
				.prototype)).constructor = ym).prototype.setMap = function(t) {
				dm.prototype.setMap.call(this, t), this.updateState_()
			}, ym.prototype.getOverlay = function() {
				return this.overlay_
			}, ym.prototype.handleEvent = function(t) {
				t.originalEvent.type === A.CONTEXTMENU && t.preventDefault(), this.freehand_ = this
					.mode_ !== om && this.freehandCondition_(t);
				var e = t.type === To.POINTERMOVE,
					i = !0;
				return !this.freehand_ && this.lastDragTime_ && t.type === To.POINTERDRAG && (Date
					.now() - this.lastDragTime_ >= this.dragVertexDelay_ ? (this.downPx_ = t.pixel, this
							.shouldHandle_ = !this.freehand_, e = !0) : this.lastDragTime_ = void 0,
						this.shouldHandle_ && void 0 !== this.downTimeout_ && (clearTimeout(this
							.downTimeout_), this.downTimeout_ = void 0)), this.freehand_ && t.type ===
					To.POINTERDRAG && null !== this.sketchFeature_ ? (this.addToDrawing_(t), i = !1) :
					this.freehand_ && t.type === To.POINTERDOWN ? i = !1 : e ? (i = t.type === To
						.POINTERMOVE) && this.freehand_ ? i = this.handlePointerMove_(t) : (t
						.pointerEvent.pointerType == Yo || t.type === To.POINTERDRAG && void 0 === this
						.downTimeout_) && this.handlePointerMove_(t) : t.type === To.DBLCLICK && (i = !
						1), dm.prototype.handleEvent.call(this, t) && i
			}, ym.prototype.handleDownEvent = function(t) {
				return this.shouldHandle_ = !this.freehand_, this.freehand_ ? (this.downPx_ = t.pixel,
					this.finishCoordinate_ || this.startDrawing_(t), !0) : !!this.condition_(t) && (
					this.lastDragTime_ = Date.now(), this.downTimeout_ = setTimeout(function() {
						this.handlePointerMove_(new Ro(To.POINTERMOVE, t.map, t.pointerEvent, !
							1, t.frameState))
					}.bind(this), this.dragVertexDelay_), this.downPx_ = t.pixel, !0)
			}, ym.prototype.handleUpEvent = function(t) {
				var e = !0;
				this.downTimeout_ && (clearTimeout(this.downTimeout_), this.downTimeout_ = void 0), this
					.handlePointerMove_(t);
				var i = this.mode_ === am;
				return this.shouldHandle_ ? (this.finishCoordinate_ ? this.freehand_ || i ? this
						.finishDrawing() : this.atFinish_(t) ? this.finishCondition_(t) && this
						.finishDrawing() : this.addToDrawing_(t) : (this.startDrawing_(t), this
							.mode_ === om && this.finishDrawing()), e = !1) : this.freehand_ && (this
						.finishCoordinate_ = null, this.abortDrawing_()), !e && this.stopClick_ && t
					.stopPropagation(), e
			}, ym.prototype.handlePointerMove_ = function(t) {
				if (this.downPx_ && (!this.freehand_ && this.shouldHandle_ || this.freehand_ && !this
						.shouldHandle_)) {
					var e = this.downPx_,
						i = t.pixel,
						r = e[0] - i[0],
						i = e[1] - i[1],
						i = r * r + i * i;
					if (this.shouldHandle_ = this.freehand_ ? i > this.squaredClickTolerance_ : i <=
						this.squaredClickTolerance_, !this.shouldHandle_) return !0
				}
				return this.finishCoordinate_ ? this.modifyDrawing_(t) : this
					.createOrUpdateSketchPoint_(t), !0
			}, ym.prototype.atFinish_ = function(t) {
				var e = !1;
				if (this.sketchFeature_) {
					var i, r = !1,
						o = [this.finishCoordinate_];
					if (this.mode_ === nm ? r = this.sketchCoords_.length > this.minPoints_ : this
						.mode_ === sm && (r = (i = this.sketchCoords_)[0].length > this.minPoints_,
							o = [i[0][0], i[0][i[0].length - 2]]), r)
						for (var n = t.map, s = 0, a = o.length; s < a; s++) {
							var h = o[s],
								l = n.getPixelFromCoordinate(h),
								u = t.pixel,
								p = u[0] - l[0],
								u = u[1] - l[1],
								l = this.freehand_ ? 1 : this.snapTolerance_;
							if (e = Math.sqrt(p * p + u * u) <= l) {
								this.finishCoordinate_ = h;
								break
							}
						}
				}
				return e
			}, ym.prototype.createOrUpdateSketchPoint_ = function(t) {
				t = t.coordinate.slice();
				this.sketchPoint_ ? this.sketchPoint_.getGeometry().setCoordinates(t) : (this
					.sketchPoint_ = new et(new Oi(t)), this.updateSketchFeatures_())
			}, ym.prototype.startDrawing_ = function(t) {
				t = t.coordinate;
				this.finishCoordinate_ = t, this.mode_ === om ? this.sketchCoords_ = t.slice() : this
					.mode_ === sm ? (this.sketchCoords_ = [
						[t.slice(), t.slice()]
					], this.sketchLineCoords_ = this.sketchCoords_[0]) : this.sketchCoords_ = [t
					.slice(), t.slice()
					], this.sketchLineCoords_ && (this.sketchLine_ = new et(new Vr(this
						.sketchLineCoords_)));
				t = this.geometryFunction_(this.sketchCoords_);
				this.sketchFeature_ = new et, this.geometryName_ && this.sketchFeature_.setGeometryName(
						this.geometryName_), this.sketchFeature_.setGeometry(t), this
					.updateSketchFeatures_(), this.dispatchEvent(new lm(hm, this.sketchFeature_))
			}, ym.prototype.modifyDrawing_ = function(t) {
				var e, i, r, o = t.coordinate,
					n = this.sketchFeature_.getGeometry();
				this.mode_ === om ? i = this.sketchCoords_ : this.mode_ === sm ? (i = (e = this
						.sketchCoords_[0])[e.length - 1], this.atFinish_(t) && (o = this
						.finishCoordinate_.slice())) : i = (e = this.sketchCoords_)[e.length - 1], i[
					0] = o[0], i[1] = o[1], this.geometryFunction_(this.sketchCoords_, n), this
					.sketchPoint_ && this.sketchPoint_.getGeometry().setCoordinates(o), n.getType() ==
					Ht.POLYGON && this.mode_ !== sm ? (this.sketchLine_ || (this.sketchLine_ = new et),
						n = n.getLinearRing(0), (r = this.sketchLine_.getGeometry()) ? (r
							.setFlatCoordinates(n.getLayout(), n.getFlatCoordinates()), r.changed()) : (
							r = new Vr(n.getFlatCoordinates(), n.getLayout()), this.sketchLine_
							.setGeometry(r))) : this.sketchLineCoords_ && (r = this.sketchLine_
						.getGeometry()).setCoordinates(this.sketchLineCoords_), this
					.updateSketchFeatures_()
			}, ym.prototype.addToDrawing_ = function(t) {
				var e, i, r = t.coordinate,
					t = this.sketchFeature_.getGeometry();
				this.mode_ === nm ? (this.finishCoordinate_ = r.slice(), (i = this.sketchCoords_)
						.length >= this.maxPoints_ && (this.freehand_ ? i.pop() : e = !0), i.push(r
							.slice()), this.geometryFunction_(i, t)) : this.mode_ === sm && ((i = this
							.sketchCoords_[0]).length >= this.maxPoints_ && (this.freehand_ ? i.pop() :
							e = !0), i.push(r.slice()), e && (this.finishCoordinate_ = i[0]), this
						.geometryFunction_(this.sketchCoords_, t)), this.updateSketchFeatures_(), e &&
					this.finishDrawing()
			}, ym.prototype.removeLastPoint = function() {
				var t, e;
				this.sketchFeature_ && (e = this.sketchFeature_.getGeometry(), this.mode_ === nm ? ((t =
							this.sketchCoords_).splice(-2, 1), this.geometryFunction_(t, e), 2 <= t
						.length && (this.finishCoordinate_ = t[t.length - 2].slice())) : this
					.mode_ === sm && ((t = this.sketchCoords_[0]).splice(-2, 1), this.sketchLine_
						.getGeometry().setCoordinates(t), this.geometryFunction_(this.sketchCoords_,
							e)), 0 === t.length && (this.finishCoordinate_ = null), this
					.updateSketchFeatures_())
			}, ym.prototype.finishDrawing = function() {
				var t, e, i = this.abortDrawing_();
				i && (t = this.sketchCoords_, e = i.getGeometry(), this.mode_ === nm ? (t.pop(), this
						.geometryFunction_(t, e)) : this.mode_ === sm && (t[0].pop(), this
						.geometryFunction_(t, e), t = e.getCoordinates()), this.type_ === Ht
					.MULTI_POINT ? i.setGeometry(new Jy([t])) : this.type_ === Ht
					.MULTI_LINE_STRING ? i.setGeometry(new qy([t])) : this.type_ === Ht
					.MULTI_POLYGON && i.setGeometry(new rm([t])), this.dispatchEvent(new lm(
						"drawend", i)), this.features_ && this.features_.push(i), this.source_ &&
					this.source_.addFeature(i))
			}, ym.prototype.abortDrawing_ = function() {
				this.finishCoordinate_ = null;
				var t = this.sketchFeature_;
				return t && (this.sketchFeature_ = null, this.sketchPoint_ = null, this.sketchLine_ =
					null, this.overlay_.getSource().clear(!0)), t
			}, ym.prototype.extend = function(t) {
				var e = t.getGeometry();
				this.sketchFeature_ = t, this.sketchCoords_ = e.getCoordinates();
				e = this.sketchCoords_[this.sketchCoords_.length - 1];
				this.finishCoordinate_ = e.slice(), this.sketchCoords_.push(e.slice()), this
					.updateSketchFeatures_(), this.dispatchEvent(new lm(hm, this.sketchFeature_))
			}, ym.prototype.updateSketchFeatures_ = function() {
				var t = [];
				this.sketchFeature_ && t.push(this.sketchFeature_), this.sketchLine_ && t.push(this
					.sketchLine_), this.sketchPoint_ && t.push(this.sketchPoint_);
				var e = this.overlay_.getSource();
				e.clear(!0), e.addFeatures(t)
			}, ym.prototype.updateState_ = function() {
				var t = this.getMap(),
					e = this.getActive();
				t && e || this.abortDrawing_(), this.overlay_.setMap(e ? t : null)
			}, ym),
			_m = "extentchanged",
			fm = ((cm = F) && (gm.__proto__ = cm), (gm.prototype = Object.create(cm && cm.prototype))
				.constructor = gm);

		function gm(t) {
			cm.call(this, _m), this.extent = t
		}

		function ym(t) {
			var e = t;
			e.stopDown || (e.stopDown = I), dm.call(this, e), this.shouldHandle_ = !1, this.downPx_ = null,
				this.downTimeout_, this.lastDragTime_, this.freehand_ = !1, this.source_ = t.source || null,
				this.features_ = t.features || null, this.snapTolerance_ = t.snapTolerance || 12, this
				.type_ = t.type, this.mode_ = ((e = this.type_) === Ht.POINT || e === Ht.MULTI_POINT ? n =
					om : e === Ht.LINE_STRING || e === Ht.MULTI_LINE_STRING ? n = nm : e === Ht.POLYGON ||
					e === Ht.MULTI_POLYGON ? n = sm : e === Ht.CIRCLE && (n = am), n), this.stopClick_ = !!t
				.stopClick, this.minPoints_ = t.minPoints || (this.mode_ === sm ? 3 : 2), this.maxPoints_ =
				t.maxPoints || 1 / 0, this.finishCondition_ = t.finishCondition || R;
			var i, r, o, n = (n = t.geometryFunction) || (this.type_ === Ht.CIRCLE ? function(t, e) {
				var i = e || new Zy([NaN, NaN]),
					e = Dr(t[0], t[1]);
				return i.setCenterAndRadius(t[0], Math.sqrt(e)), i
			} : ((r = this.mode_) === om ? i = Oi : r === nm ? i = Vr : r === sm && (i = Zi),
				function(t, e) {
					return e ? r === sm ? t[0].length ? e.setCoordinates([t[0].concat([t[0][0]])]) :
						e.setCoordinates([]) : e.setCoordinates(t) : e = new i(t), e
				}));
			this.geometryFunction_ = n, this.dragVertexDelay_ = void 0 !== t.dragVertexDelay ? t
				.dragVertexDelay : 500, this.finishCoordinate_ = null, this.sketchFeature_ = null, this
				.sketchPoint_ = null, this.sketchCoords_ = null, this.sketchLine_ = null, this
				.sketchLineCoords_ = null, this.squaredClickTolerance_ = t.clickTolerance ? t
				.clickTolerance * t.clickTolerance : 36, this.overlay_ = new by({
					source: new Af({
						useSpatialIndex: !1,
						wrapX: !!t.wrapX && t.wrapX
					}),
					style: t.style || (o = $_(), function(t, e) {
						return o[t.getGeometry().getType()]
					}),
					updateWhileInteracting: !0
				}), this.geometryName_ = t.geometryName, this.condition_ = t.condition || Oa, this
				.freehandCondition_, t.freehand ? this.freehandCondition_ = La : this.freehandCondition_ = t
				.freehandCondition || Aa, E(this, z(da), this.updateState_, this)
		}

		function mm(e) {
			return function(t) {
				return ft([e, t])
			}
		}

		function vm(e, i) {
			return e[0] == i[0] ? function(t) {
				return ft([e, [t[0], i[1]]])
			} : e[1] == i[1] ? function(t) {
				return ft([e, [i[0], t[1]]])
			} : null
		}
		var xm, Em, Lc = ((Em = Wa) && (Rm.__proto__ = Em), ((Rm.prototype = Object.create(Em && Em
				.prototype)).constructor = Rm).prototype.snapToVertex_ = function(t, e) {
				var i = e.getCoordinateFromPixel(t),
					r = this.getExtent();
				if (r) {
					var o = [
						[
							[r[0], r[1]],
							[r[0], r[3]]
						],
						[
							[r[0], r[3]],
							[r[2], r[3]]
						],
						[
							[r[2], r[3]],
							[r[2], r[1]]
						],
						[
							[r[2], r[1]],
							[r[0], r[1]]
						]
					];
					o.sort(function(t, e) {
						return jr(i, t) - jr(i, e)
					});
					var n = o[0],
						r = Mr(i, n),
						o = e.getPixelFromCoordinate(r);
					if (kr(t, o) <= this.pixelTolerance_) {
						t = e.getPixelFromCoordinate(n[0]), e = e.getPixelFromCoordinate(n[1]), t = Dr(
							o, t), o = Dr(o, e), e = Math.sqrt(Math.min(t, o));
						return this.snappedToVertex_ = e <= this.pixelTolerance_, this
							.snappedToVertex_ && (r = o < t ? n[1] : n[0]), r
					}
				}
				return null
			}, Rm.prototype.handlePointerMove_ = function(t) {
				var e = t.pixel,
					i = t.map,
					t = (t = this.snapToVertex_(e, i)) || i.getCoordinateFromPixel(e);
				this.createOrUpdatePointerFeature_(t)
			}, Rm.prototype.createOrUpdateExtentFeature_ = function(t) {
				var e = this.extentFeature_;
				return e ? t ? e.setGeometry(Qi(t)) : e.setGeometry(void 0) : (e = new et(t ? Qi(t) :
					{}), this.extentFeature_ = e, this.extentOverlay_.getSource().addFeature(e)), e
			}, Rm.prototype.createOrUpdatePointerFeature_ = function(t) {
				var e = this.vertexFeature_;
				return e ? e.getGeometry().setCoordinates(t) : (e = new et(new Oi(t)), this
					.vertexFeature_ = e, this.vertexOverlay_.getSource().addFeature(e)), e
			}, Rm.prototype.handleEvent = function(t) {
				return !t.pointerEvent || (t.type != To.POINTERMOVE || this.handlingDownUpSequence ||
					this.handlePointerMove_(t), Em.prototype.handleEvent.call(this, t), !1)
			}, Rm.prototype.handleDownEvent = function(t) {
				var e, i = t.pixel,
					r = t.map,
					o = this.getExtent(),
					n = this.snapToVertex_(i, r),
					s = function(t) {
						var e = null,
							i = null;
						return t[0] == o[0] ? e = o[2] : t[0] == o[2] && (e = o[0]), t[1] == o[1] ? i =
							o[3] : t[1] == o[3] && (i = o[1]), null !== e && null !== i ? [e, i] : null
					};
				return n && o ? (e = n[0] == o[0] || n[0] == o[2] ? n[0] : null, t = n[1] == o[1] || n[
						1] == o[3] ? n[1] : null, null !== e && null !== t ? this.pointerHandler_ =
					mm(s(n)) : null !== e ? this.pointerHandler_ = vm(s([e, o[1]]), s([e, o[3]])) :
					null !== t && (this.pointerHandler_ = vm(s([o[0], t]), s([o[2], t])))) : (n = r
					.getCoordinateFromPixel(i), this.setExtent([n[0], n[1], n[0], n[1]]), this
					.pointerHandler_ = mm(n)), !0
			}, Rm.prototype.handleDragEvent = function(t) {
				return this.pointerHandler_ && (t = t.coordinate, this.setExtent(this.pointerHandler_(
					t)), this.createOrUpdatePointerFeature_(t)), !0
			}, Rm.prototype.handleUpEvent = function(t) {
				this.pointerHandler_ = null;
				var e = this.getExtent();
				return e && 0 !== Ot(e) || this.setExtent(null), !1
			}, Rm.prototype.setMap = function(t) {
				this.extentOverlay_.setMap(t), this.vertexOverlay_.setMap(t), Em.prototype.setMap.call(
					this, t)
			}, Rm.prototype.getExtent = function() {
				return this.extent_
			}, Rm.prototype.setExtent = function(t) {
				this.extent_ = t || null, this.createOrUpdateExtentFeature_(t), this.dispatchEvent(
					new fm(this.extent_))
			}, Rm),
			Sm = 1,
			Cm = "modifyend",
			wm = ((xm = F) && (Tm.__proto__ = xm), (Tm.prototype = Object.create(xm && xm.prototype))
				.constructor = Tm);

		function Tm(t, e, i) {
			xm.call(this, t), this.features = e, this.mapBrowserEvent = i
		}

		function Rm(t) {
			var i, r, e = t || {};
			Em.call(this, e), this.extent_ = null, this.pointerHandler_ = null, this.pixelTolerance_ =
				void 0 !== e.pixelTolerance ? e.pixelTolerance : 10, this.snappedToVertex_ = !1, this
				.extentFeature_ = null, this.vertexFeature_ = null, t = t || {}, this.extentOverlay_ =
				new by({
					source: new Af({
						useSpatialIndex: !1,
						wrapX: !!t.wrapX
					}),
					style: t.boxStyle || (r = $_(), function(t, e) {
						return r[Ht.POLYGON]
					}),
					updateWhileAnimating: !0,
					updateWhileInteracting: !0
				}), this.vertexOverlay_ = new by({
					source: new Af({
						useSpatialIndex: !1,
						wrapX: !!t.wrapX
					}),
					style: t.pointerStyle || (i = $_(), function(t, e) {
						return i[Ht.POINT]
					}),
					updateWhileAnimating: !0,
					updateWhileInteracting: !0
				}), t.extent && this.setExtent(t.extent)
		}

		function Im(t, e) {
			return t.index - e.index
		}

		function Lm(t, e) {
			var i = e.geometry;
			if (i.getType() === Ht.CIRCLE) {
				var r = i;
				if (e.index === Sm) {
					i = Dr(r.getCenter(), t), r = Math.sqrt(i) - r.getRadius();
					return r * r
				}
			}
			return jr(t, e.segment)
		}

		function bm(t, e) {
			var i = e.geometry;
			return i.getType() === Ht.CIRCLE && e.index === Sm ? i.getClosestPoint(t) : Mr(t, e.segment)
		}
		var Pm, Mm, Yp = ((Mm = Wa) && (Nm.__proto__ = Mm), ((Nm.prototype = Object.create(Mm && Mm
				.prototype)).constructor = Nm).prototype.addFeature_ = function(t) {
				var e = t.getGeometry();
				e && e.getType() in this.SEGMENT_WRITERS_ && this.SEGMENT_WRITERS_[e.getType()].call(
					this, t, e);
				e = this.getMap();
				e && e.isRendered() && this.getActive() && this.handlePointerAtPixel_(this.lastPixel_,
					e), E(t, A.CHANGE, this.handleFeatureChange_, this)
			}, Nm.prototype.willModifyFeatures_ = function(t) {
				this.modified_ || (this.modified_ = !0, this.dispatchEvent(new wm("modifystart", this
					.features_, t)))
			}, Nm.prototype.removeFeature_ = function(t) {
				this.removeFeatureSegmentData_(t), this.vertexFeature_ && 0 === this.features_
					.getLength() && (this.overlay_.getSource().removeFeature(this.vertexFeature_), this
						.vertexFeature_ = null), x(t, A.CHANGE, this.handleFeatureChange_, this)
			}, Nm.prototype.removeFeatureSegmentData_ = function(e) {
				var t = this.rBush_,
					i = [];
				t.forEach(function(t) {
					e === t.feature && i.push(t)
				});
				for (var r = i.length - 1; 0 <= r; --r) t.remove(i[r])
			}, Nm.prototype.setActive = function(t) {
				this.vertexFeature_ && !t && (this.overlay_.getSource().removeFeature(this
					.vertexFeature_), this.vertexFeature_ = null), Mm.prototype.setActive.call(this,
					t)
			}, Nm.prototype.setMap = function(t) {
				this.overlay_.setMap(t), Mm.prototype.setMap.call(this, t)
			}, Nm.prototype.getOverlay = function() {
				return this.overlay_
			}, Nm.prototype.handleSourceAdd_ = function(t) {
				t.feature && this.features_.push(t.feature)
			}, Nm.prototype.handleSourceRemove_ = function(t) {
				t.feature && this.features_.remove(t.feature)
			}, Nm.prototype.handleFeatureAdd_ = function(t) {
				this.addFeature_(t.element)
			}, Nm.prototype.handleFeatureChange_ = function(t) {
				this.changingFeature_ || (t = t.target, this.removeFeature_(t), this.addFeature_(t))
			}, Nm.prototype.handleFeatureRemove_ = function(t) {
				t = t.element;
				this.removeFeature_(t)
			}, Nm.prototype.writePointGeometry_ = function(t, e) {
				var i = e.getCoordinates(),
					i = {
						feature: t,
						geometry: e,
						segment: [i, i]
					};
				this.rBush_.insert(e.getExtent(), i)
			}, Nm.prototype.writeMultiPointGeometry_ = function(t, e) {
				for (var i = e.getCoordinates(), r = 0, o = i.length; r < o; ++r) {
					var n = i[r],
						n = {
							feature: t,
							geometry: e,
							depth: [r],
							index: r,
							segment: [n, n]
						};
					this.rBush_.insert(e.getExtent(), n)
				}
			}, Nm.prototype.writeLineStringGeometry_ = function(t, e) {
				for (var i = e.getCoordinates(), r = 0, o = i.length - 1; r < o; ++r) {
					var n = i.slice(r, r + 2),
						s = {
							feature: t,
							geometry: e,
							index: r,
							segment: n
						};
					this.rBush_.insert(ft(n), s)
				}
			}, Nm.prototype.writeMultiLineStringGeometry_ = function(t, e) {
				for (var i = e.getCoordinates(), r = 0, o = i.length; r < o; ++r)
					for (var n = i[r], s = 0, a = n.length - 1; s < a; ++s) {
						var h = n.slice(s, s + 2),
							l = {
								feature: t,
								geometry: e,
								depth: [r],
								index: s,
								segment: h
							};
						this.rBush_.insert(ft(h), l)
					}
			}, Nm.prototype.writePolygonGeometry_ = function(t, e) {
				for (var i = e.getCoordinates(), r = 0, o = i.length; r < o; ++r)
					for (var n = i[r], s = 0, a = n.length - 1; s < a; ++s) {
						var h = n.slice(s, s + 2),
							l = {
								feature: t,
								geometry: e,
								depth: [r],
								index: s,
								segment: h
							};
						this.rBush_.insert(ft(h), l)
					}
			}, Nm.prototype.writeMultiPolygonGeometry_ = function(t, e) {
				for (var i = e.getCoordinates(), r = 0, o = i.length; r < o; ++r)
					for (var n = i[r], s = 0, a = n.length; s < a; ++s)
						for (var h = n[s], l = 0, u = h.length - 1; l < u; ++l) {
							var p = h.slice(l, l + 2),
								c = {
									feature: t,
									geometry: e,
									depth: [s, r],
									index: l,
									segment: p
								};
							this.rBush_.insert(ft(p), c)
						}
			}, Nm.prototype.writeCircleGeometry_ = function(t, e) {
				var i = e.getCenter(),
					r = {
						feature: t,
						geometry: e,
						index: 0,
						segment: [i, i]
					},
					o = {
						feature: t,
						geometry: e,
						index: Sm,
						segment: [i, i]
					},
					t = [r, o];
				r.featureSegments = o.featureSegments = t, this.rBush_.insert(Rt(i), r), this.rBush_
					.insert(e.getExtent(), o)
			}, Nm.prototype.writeGeometryCollectionGeometry_ = function(t, e) {
				for (var i = e.getGeometriesArray(), r = 0; r < i.length; ++r) this.SEGMENT_WRITERS_[i[
					r].getType()].call(this, t, i[r])
			}, Nm.prototype.createOrUpdateVertexFeature_ = function(t) {
				var e = this.vertexFeature_;
				return e ? e.getGeometry().setCoordinates(t) : (e = new et(new Oi(t)), this
					.vertexFeature_ = e, this.overlay_.getSource().addFeature(e)), e
			}, Nm.prototype.handleEvent = function(t) {
				return !t.pointerEvent || ((this.lastPointerEvent_ = t).map.getView()
				.getInteracting() || t.type != To.POINTERMOVE || this.handlingDownUpSequence || this
					.handlePointerMove_(t), this.vertexFeature_ && this.deleteCondition_(t) && (
						e = !(t.type != To.SINGLECLICK || !this.ignoreNextSingleClick_) || this
						.removePoint()), t.type == To.SINGLECLICK && (this
						.ignoreNextSingleClick_ = !1), Mm.prototype.handleEvent.call(this, t) && !e);
				var e
			}, Nm.prototype.handleDragEvent = function(t) {
				this.ignoreNextSingleClick_ = !1, this.willModifyFeatures_(t);
				for (var e = t.coordinate, i = 0, r = this.dragSegments_.length; i < r; ++i) {
					for (var o = this.dragSegments_[i], n = o[0], s = n.depth, a = n.geometry, h =
							void 0, l = n.segment, u = o[1]; e.length < a.getStride();) e.push(l[u][e
						.length
					]);
					switch (a.getType()) {
						case Ht.POINT:
							h = e, l[0] = l[1] = e;
							break;
						case Ht.MULTI_POINT:
							(h = a.getCoordinates())[n.index] = e, l[0] = l[1] = e;
							break;
						case Ht.LINE_STRING:
							(h = a.getCoordinates())[n.index + u] = e, l[u] = e;
							break;
						case Ht.MULTI_LINE_STRING:
						case Ht.POLYGON:
							(h = a.getCoordinates())[s[0]][n.index + u] = e, l[u] = e;
							break;
						case Ht.MULTI_POLYGON:
							(h = a.getCoordinates())[s[1]][s[0]][n.index + u] = e, l[u] = e;
							break;
						case Ht.CIRCLE:
							l[0] = l[1] = e, 0 === n.index ? (this.changingFeature_ = !0, a.setCenter(
								e)) : (this.changingFeature_ = !0, a.setRadius(kr(a.getCenter(),
								e))), this.changingFeature_ = !1
					}
					h && this.setGeometryCoordinates_(a, h)
				}
				this.createOrUpdateVertexFeature_(e)
			}, Nm.prototype.handleDownEvent = function(t) {
				if (!this.condition_(t)) return !1;
				this.handlePointerAtPixel_(t.pixel, t.map);
				var e = t.map.getCoordinateFromPixel(t.pixel);
				this.dragSegments_.length = 0, this.modified_ = !1;
				var i = this.vertexFeature_;
				if (i) {
					var r = [],
						o = i.getGeometry().getCoordinates(),
						i = ft([o]),
						n = this.rBush_.getInExtent(i),
						s = {};
					n.sort(Im);
					for (var a = 0, h = n.length; a < h; ++a) {
						var l = n[a],
							u = l.segment,
							p = ct(l.feature),
							c = l.depth;
						c && (p += "-" + c.join("-")), s[p] || (s[p] = new Array(2)), l.geometry
							.getType() === Ht.CIRCLE && l.index === Sm ? Ar(bm(e, l), o) && !s[p][0] &&
							(this.dragSegments_.push([l, 0]), s[p][0] = l) : Ar(u[0], o) && !s[p][0] ? (
								this.dragSegments_.push([l, 0]), s[p][0] = l) : Ar(u[1], o) && !s[p][
							1] ? (l.geometry.getType() === Ht.LINE_STRING || l.geometry.getType() === Ht
								.MULTI_LINE_STRING) && s[p][0] && 0 === s[p][0].index || (this
								.dragSegments_.push([l, 1]), s[p][1] = l) : this.insertVertexCondition_(
								t) && ct(u) in this.vertexSegments_ && !s[p][0] && !s[p][1] && r.push([
								l, o
							])
					}
					r.length && this.willModifyFeatures_(t);
					for (var d = r.length - 1; 0 <= d; --d) this.insertVertex_.apply(this, r[d])
				}
				return !!this.vertexFeature_
			}, Nm.prototype.handleUpEvent = function(t) {
				for (var e = this.dragSegments_.length - 1; 0 <= e; --e) {
					var i, r, o, n = this.dragSegments_[e][0],
						s = n.geometry;
					s.getType() === Ht.CIRCLE ? (i = s.getCenter(), r = n.featureSegments[0], o = n
						.featureSegments[1], r.segment[0] = r.segment[1] = i, o.segment[0] = o
						.segment[1] = i, this.rBush_.update(Rt(i), r), this.rBush_.update(s
							.getExtent(), o)) : this.rBush_.update(ft(n.segment), n)
				}
				return this.modified_ && (this.dispatchEvent(new wm(Cm, this.features_, t)), this
					.modified_ = !1), !1
			}, Nm.prototype.handlePointerMove_ = function(t) {
				this.lastPixel_ = t.pixel, this.handlePointerAtPixel_(t.pixel, t.map)
			}, Nm.prototype.handlePointerAtPixel_ = function(t, e) {
				var i = e.getCoordinateFromPixel(t),
					r = gt(Rt(i), e.getView().getResolution() * this.pixelTolerance_),
					o = this.rBush_.getInExtent(r);
				if (0 < o.length) {
					o.sort(function(t, e) {
						return Lm(i, t) - Lm(i, e)
					});
					var n = o[0],
						s = n.segment,
						a = bm(i, n),
						r = e.getPixelFromCoordinate(a);
					if ((t = kr(t, r)) <= this.pixelTolerance_) {
						var h = {};
						if (n.geometry.getType() === Ht.CIRCLE && n.index === Sm) this
							.snappedToVertex_ = !0, this.createOrUpdateVertexFeature_(a);
						else {
							n = e.getPixelFromCoordinate(s[0]), e = e.getPixelFromCoordinate(s[1]), n =
								Dr(r, n), e = Dr(r, e), t = Math.sqrt(Math.min(n, e));
							this.snappedToVertex_ = t <= this.pixelTolerance_, this.snappedToVertex_ &&
								(a = e < n ? s[1] : s[0]), this.createOrUpdateVertexFeature_(a);
							for (var l = 1, u = o.length; l < u; ++l) {
								var p = o[l].segment;
								if (!(Ar(s[0], p[0]) && Ar(s[1], p[1]) || Ar(s[0], p[1]) && Ar(s[1], p[
										0]))) break;
								h[ct(p)] = !0
							}
						}
						return h[ct(s)] = !0, void(this.vertexSegments_ = h)
					}
				}
				this.vertexFeature_ && (this.overlay_.getSource().removeFeature(this.vertexFeature_),
					this.vertexFeature_ = null)
			}, Nm.prototype.insertVertex_ = function(t, e) {
				for (var i, r = t.segment, o = t.feature, n = t.geometry, s = t.depth, a = t.index; e
					.length < n.getStride();) e.push(0);
				switch (n.getType()) {
					case Ht.MULTI_LINE_STRING:
					case Ht.POLYGON:
						(i = n.getCoordinates())[s[0]].splice(a + 1, 0, e);
						break;
					case Ht.MULTI_POLYGON:
						(i = n.getCoordinates())[s[1]][s[0]].splice(a + 1, 0, e);
						break;
					case Ht.LINE_STRING:
						(i = n.getCoordinates()).splice(a + 1, 0, e);
						break;
					default:
						return
				}
				this.setGeometryCoordinates_(n, i);
				var h = this.rBush_;
				h.remove(t), this.updateSegmentIndices_(n, a, s, 1);
				t = {
					segment: [r[0], e],
					feature: o,
					geometry: n,
					depth: s,
					index: a
				};
				h.insert(ft(t.segment), t), this.dragSegments_.push([t, 1]);
				o = {
					segment: [e, r[1]],
					feature: o,
					geometry: n,
					depth: s,
					index: a + 1
				};
				h.insert(ft(o.segment), o), this.dragSegments_.push([o, 0]), this
					.ignoreNextSingleClick_ = !0
			}, Nm.prototype.removePoint = function() {
				if (this.lastPointerEvent_ && this.lastPointerEvent_.type != To.POINTERDRAG) {
					var t = this.lastPointerEvent_;
					return this.willModifyFeatures_(t), this.removeVertex_(), this.dispatchEvent(new wm(
						Cm, this.features_, t)), !(this.modified_ = !1)
				}
				return !1
			}, Nm.prototype.removeVertex_ = function() {
				for (var t, e, i, r, o, n, s, a, h, l, u, p = this.dragSegments_, c = {}, d = !1, _ = p
						.length - 1; 0 <= _; --_) l = ct((h = (i = p[_])[0]).feature), h.depth && (l +=
					"-" + h.depth.join("-")), l in c || (c[l] = {}), 0 === i[1] ? (c[l].right = h,
					c[l].index = h.index) : 1 == i[1] && (c[l].left = h, c[l].index = h.index + 1);
				for (l in c) {
					switch (a = c[l].right, n = c[l].left, (s = (o = c[l].index) - 1) < 0 && (s = 0),
						t = e = (r = (h = void 0 !== n ? n : a).geometry).getCoordinates(), d = !1, r
						.getType()) {
						case Ht.MULTI_LINE_STRING:
							2 < e[h.depth[0]].length && (e[h.depth[0]].splice(o, 1), d = !0);
							break;
						case Ht.LINE_STRING:
							2 < e.length && (e.splice(o, 1), d = !0);
							break;
						case Ht.MULTI_POLYGON:
							t = t[h.depth[1]];
						case Ht.POLYGON:
							4 < (t = t[h.depth[0]]).length && (o == t.length - 1 && (o = 0), t.splice(o,
									1), d = !0, 0 === o && (t.pop(), t.push(t[0]), s = t.length -
								1))
					}
					d && (this.setGeometryCoordinates_(r, e), u = [], void 0 !== n && (this.rBush_
							.remove(n), u.push(n.segment[0])), void 0 !== a && (this.rBush_.remove(
							a), u.push(a.segment[1])), void 0 !== n && void 0 !== a && (u = {
							depth: h.depth,
							feature: h.feature,
							geometry: h.geometry,
							index: s,
							segment: u
						}, this.rBush_.insert(ft(u.segment), u)), this.updateSegmentIndices_(r, o, h
							.depth, -1), this.vertexFeature_ && (this.overlay_.getSource()
							.removeFeature(this.vertexFeature_), this.vertexFeature_ = null), p
						.length = 0)
				}
				return d
			}, Nm.prototype.setGeometryCoordinates_ = function(t, e) {
				this.changingFeature_ = !0, t.setCoordinates(e), this.changingFeature_ = !1
			}, Nm.prototype.updateSegmentIndices_ = function(e, i, r, o) {
				this.rBush_.forEachInExtent(e.getExtent(), function(t) {
					t.geometry === e && (void 0 === r || void 0 === t.depth || _t(t.depth,
						r)) && t.index > i && (t.index += o)
				})
			}, Nm),
			Fm = {
				SELECT: "select"
			},
			Om = ((Pm = F) && (Am.__proto__ = Pm), (Am.prototype = Object.create(Pm && Pm.prototype))
				.constructor = Am);

		function Am(t, e, i, r) {
			Pm.call(this, t), this.selected = e, this.deselected = i, this.mapBrowserEvent = r
		}

		function Nm(t) {
			var e, i;
			if (Mm.call(this, t), this.condition_ = t.condition || Da, this.defaultDeleteCondition_ =
				function(t) {
					return Ta(t) && Fa(t)
				}, this.deleteCondition_ = t.deleteCondition || this.defaultDeleteCondition_, this
				.insertVertexCondition_ = t.insertVertexCondition || La, this.vertexFeature_ = null, this
				.vertexSegments_ = null, this.lastPixel_ = [0, 0], this.ignoreNextSingleClick_ = !1, this
				.modified_ = !1, this.rBush_ = new Pc, this.pixelTolerance_ = void 0 !== t.pixelTolerance ?
				t.pixelTolerance : 10, this.snappedToVertex_ = !1, this.changingFeature_ = !1, this
				.dragSegments_ = [], this.overlay_ = new by({
					source: new Af({
						useSpatialIndex: !1,
						wrapX: !!t.wrapX
					}),
					style: t.style || (i = $_(), function(t, e) {
						return i[Ht.POINT]
					}),
					updateWhileAnimating: !0,
					updateWhileInteracting: !0
				}), this.SEGMENT_WRITERS_ = {
					Point: this.writePointGeometry_,
					LineString: this.writeLineStringGeometry_,
					LinearRing: this.writeLineStringGeometry_,
					Polygon: this.writePolygonGeometry_,
					MultiPoint: this.writeMultiPointGeometry_,
					MultiLineString: this.writeMultiLineStringGeometry_,
					MultiPolygon: this.writeMultiPolygonGeometry_,
					Circle: this.writeCircleGeometry_,
					GeometryCollection: this.writeGeometryCollectionGeometry_
				}, this.source_ = null, t.source ? (this.source_ = t.source, e = new Z(this.source_
					.getFeatures()), E(this.source_, bf, this.handleSourceAdd_, this), E(this.source_,
					Ff, this.handleSourceRemove_, this)) : e = t.features, !e) throw new Error(
				"The modify interaction requires features or a source");
			this.features_ = e, this.features_.forEach(this.addFeature_.bind(this)), E(this.features_, s,
					this.handleFeatureAdd_, this), E(this.features_, h, this.handleFeatureRemove_, this),
				this.lastPointerEvent_ = null
		}

		function Gm(t) {
			if (!this.condition_(t)) return !0;
			var i = this.addCondition_(t),
				r = this.removeCondition_(t),
				o = this.toggleCondition_(t),
				e = !i && !r && !o,
				n = t.map,
				s = this.getFeatures(),
				a = [],
				h = [];
			if (e) {
				_(this.featureLayerAssociation_), n.forEachFeatureAtPixel(t.pixel, function(t, e) {
					if (this.filter_(t, e)) return h.push(t), this.addFeatureLayerAssociation_(t,
						e), !this.multi_
				}.bind(this), {
					layerFilter: this.layerFilter_,
					hitTolerance: this.hitTolerance_
				});
				for (var l = s.getLength() - 1; 0 <= l; --l) {
					var u = s.item(l),
						p = h.indexOf(u); - 1 < p ? h.splice(p, 1) : (s.remove(u), a.push(u))
				}
				0 !== h.length && s.extend(h)
			} else {
				n.forEachFeatureAtPixel(t.pixel, function(t, e) {
					if (this.filter_(t, e)) return !i && !o || ot(s.getArray(), t) ? (r || o) && ot(
							s.getArray(), t) && (a.push(t), this.removeFeatureLayerAssociation_(
							t)) : (h.push(t), this.addFeatureLayerAssociation_(t, e)), !this
						.multi_
				}.bind(this), {
					layerFilter: this.layerFilter_,
					hitTolerance: this.hitTolerance_
				});
				for (var c = a.length - 1; 0 <= c; --c) s.remove(a[c]);
				s.extend(h)
			}
			return (0 < h.length || 0 < a.length) && this.dispatchEvent(new Om(Fm.SELECT, h, a, t)), Ma(t)
		}
		var Dm, Fc = ((Dm = xa) && (km.__proto__ = Dm), ((km.prototype = Object.create(Dm && Dm.prototype))
			.constructor = km).prototype.addFeatureLayerAssociation_ = function(t, e) {
			this.featureLayerAssociation_[ct(t)] = e
		}, km.prototype.getFeatures = function() {
			return this.featureOverlay_.getSource().getFeaturesCollection()
		}, km.prototype.getHitTolerance = function() {
			return this.hitTolerance_
		}, km.prototype.getLayer = function(t) {
			return this.featureLayerAssociation_[ct(t)]
		}, km.prototype.getOverlay = function() {
			return this.featureOverlay_
		}, km.prototype.setHitTolerance = function(t) {
			this.hitTolerance_ = t
		}, km.prototype.setMap = function(t) {
			var e = this.getMap(),
				i = this.getFeatures();
			e && i.forEach(e.unskipFeature.bind(e)), Dm.prototype.setMap.call(this, t), this
				.featureOverlay_.setMap(t), t && i.forEach(t.skipFeature.bind(t))
		}, km.prototype.addFeature_ = function(t) {
			var e = this.getMap();
			e && e.skipFeature(t.element)
		}, km.prototype.removeFeature_ = function(t) {
			var e = this.getMap();
			e && e.unskipFeature(t.element)
		}, km.prototype.removeFeatureLayerAssociation_ = function(t) {
			delete this.featureLayerAssociation_[ct(t)]
		}, km);

		function km(t) {
			Dm.call(this, {
				handleEvent: Gm
			});
			var e = t || {};
			this.condition_ = e.condition || Fa, this.addCondition_ = e.addCondition || Pa, this
				.removeCondition_ = e.removeCondition || Pa, this.toggleCondition_ = e.toggleCondition ||
				Aa, this.multi_ = !!e.multi && e.multi, this.filter_ = e.filter || R, this.hitTolerance_ = e
				.hitTolerance || 0;
			var i, r, t = new by({
				source: new Af({
					useSpatialIndex: !1,
					features: e.features,
					wrapX: e.wrapX
				}),
				style: e.style || (st((i = $_())[Ht.POLYGON], i[Ht.LINE_STRING]), st(i[Ht
					.GEOMETRY_COLLECTION], i[Ht.LINE_STRING]), function(t, e) {
					return t.getGeometry() ? i[t.getGeometry().getType()] : null
				}),
				updateWhileAnimating: !0,
				updateWhileInteracting: !0
			});
			this.featureOverlay_ = t, e = e.layers ? "function" == typeof e.layers ? e.layers : (r = e
				.layers,
				function(t) {
					return ot(r, t)
				}) : R, this.layerFilter_ = e, this.featureLayerAssociation_ = {};
			e = this.getFeatures();
			E(e, s, this.addFeature_, this), E(e, h, this.removeFeature_, this)
		}

		function jm(t) {
			return t.feature || t.element || void 0
		}
		var Um, Ym, Bm, Nc = ((Bm = Wa) && (Wm.__proto__ = Bm), ((Wm.prototype = Object.create(Bm && Bm
				.prototype)).constructor = Wm).prototype.addFeature = function(t, e) {
				var i = void 0 === e || e,
					r = ct(t),
					o = t.getGeometry();
				!o || (e = this.SEGMENT_WRITERS_[o.getType()]) && (this.indexedFeaturesExtents_[r] = o
					.getExtent([1 / 0, 1 / 0, -1 / 0, -1 / 0]), e.call(this, t, o)), i && (this
					.featureChangeListenerKeys_[r] = E(t, A.CHANGE, this.handleFeatureChange_, this)
					)
			}, Wm.prototype.forEachFeatureAdd_ = function(t) {
				this.addFeature(t)
			}, Wm.prototype.forEachFeatureRemove_ = function(t) {
				this.removeFeature(t)
			}, Wm.prototype.getFeatures_ = function() {
				var t;
				return this.features_ ? t = this.features_ : this.source_ && (t = this.source_
					.getFeatures()), t
			}, Wm.prototype.handleEvent = function(t) {
				var e = this.snapTo(t.pixel, t.coordinate, t.map);
				return e.snapped && (t.coordinate = e.vertex.slice(0, 2), t.pixel = e.vertexPixel), Bm
					.prototype.handleEvent.call(this, t)
			}, Wm.prototype.handleFeatureAdd_ = function(t) {
				t = jm(t);
				this.addFeature(t)
			}, Wm.prototype.handleFeatureRemove_ = function(t) {
				t = jm(t);
				this.removeFeature(t)
			}, Wm.prototype.handleFeatureChange_ = function(t) {
				var e = t.target;
				this.handlingDownUpSequence ? (t = ct(e)) in this.pendingFeatures_ || (this
					.pendingFeatures_[t] = e) : this.updateFeature_(e)
			}, Wm.prototype.handleUpEvent = function(t) {
				var e = p(this.pendingFeatures_);
				return e.length && (e.forEach(this.updateFeature_.bind(this)), this
					.pendingFeatures_ = {}), !1
			}, Wm.prototype.removeFeature = function(e, t) {
				var i = void 0 === t || t,
					r = ct(e),
					t = this.indexedFeaturesExtents_[r];
				if (t) {
					var o = this.rBush_,
						n = [];
					o.forEachInExtent(t, function(t) {
						e === t.feature && n.push(t)
					});
					for (var s = n.length - 1; 0 <= s; --s) o.remove(n[s])
				}
				i && (S(this.featureChangeListenerKeys_[r]), delete this.featureChangeListenerKeys_[r])
			}, Wm.prototype.setMap = function(t) {
				var e = this.getMap(),
					i = this.featuresListenerKeys_,
					r = this.getFeatures_();
				e && (i.forEach(S), i.length = 0, r.forEach(this.forEachFeatureRemove_.bind(this))), Bm
					.prototype.setMap.call(this, t), t && (this.features_ ? i.push(E(this.features_, s,
							this.handleFeatureAdd_, this), E(this.features_, h, this
							.handleFeatureRemove_, this)) : this.source_ && i.push(E(this.source_, bf,
							this.handleFeatureAdd_, this), E(this.source_, Ff, this
							.handleFeatureRemove_, this)), r.forEach(this.forEachFeatureAdd_.bind(
						this)))
			}, Wm.prototype.snapTo = function(t, e, i) {
				var r = ft([i.getCoordinateFromPixel([t[0] - this.pixelTolerance_, t[1] + this
						.pixelTolerance_
					]), i.getCoordinateFromPixel([t[0] + this.pixelTolerance_, t[1] - this
						.pixelTolerance_
					])]),
					o = this.rBush_.getInExtent(r);
				this.vertex_ && !this.edge_ && (o = o.filter(function(t) {
					return t.feature.getGeometry().getType() !== Ht.CIRCLE
				}));
				var n, s, a, h, l, u = !1,
					p = null,
					c = null;
				return 0 < o.length && (this.pixelCoordinate_ = e, o.sort(this.sortByDistance_), l = o[
						0].segment, r = o[0].feature.getGeometry().getType() === Ht.CIRCLE, this
					.vertex_ && !this.edge_ ? (n = i.getPixelFromCoordinate(l[0]), s = i
						.getPixelFromCoordinate(l[1]), a = Dr(t, n), h = Dr(t, s), Math.sqrt(Math
							.min(a, h)) <= this.pixelTolerance_ && (u = !0, p = h < a ? l[1] : l[0],
							c = i.getPixelFromCoordinate(p))) : this.edge_ && (p = r ? function(t,
						e) {
						var i = e.getRadius(),
							r = e.getCenter(),
							o = r[0],
							n = r[1],
							e = t[0] - o,
							r = t[1] - n;
						0 === e && 0 == r && (e = 1);
						t = Math.sqrt(e * e + r * r);
						return [o + i * e / t, n + i * r / t]
					}(e, o[0].feature.getGeometry()) : Mr(e, l), kr(t, c = i
						.getPixelFromCoordinate(p)) <= this.pixelTolerance_ && (u = !0, this
						.vertex_ && !r && (n = i.getPixelFromCoordinate(l[0]), s = i
							.getPixelFromCoordinate(l[1]), a = Dr(c, n), h = Dr(c, s), Math
							.sqrt(Math.min(a, h)) <= this.pixelTolerance_ && (p = h < a ? l[1] :
								l[0], c = i.getPixelFromCoordinate(p))))), u && (c = [Math.round(c[
						0]), Math.round(c[1])])), {
					snapped: u,
					vertex: p,
					vertexPixel: c
				}
			}, Wm.prototype.updateFeature_ = function(t) {
				this.removeFeature(t, !1), this.addFeature(t, !1)
			}, Wm.prototype.writeCircleGeometry_ = function(t, e) {
				for (var i = $i(e).getCoordinates()[0], r = 0, o = i.length - 1; r < o; ++r) {
					var n = i.slice(r, r + 2),
						s = {
							feature: t,
							segment: n
						};
					this.rBush_.insert(ft(n), s)
				}
			}, Wm.prototype.writeGeometryCollectionGeometry_ = function(t, e) {
				for (var i = e.getGeometriesArray(), r = 0; r < i.length; ++r) {
					var o = this.SEGMENT_WRITERS_[i[r].getType()];
					o && o.call(this, t, i[r])
				}
			}, Wm.prototype.writeLineStringGeometry_ = function(t, e) {
				for (var i = e.getCoordinates(), r = 0, o = i.length - 1; r < o; ++r) {
					var n = i.slice(r, r + 2),
						s = {
							feature: t,
							segment: n
						};
					this.rBush_.insert(ft(n), s)
				}
			}, Wm.prototype.writeMultiLineStringGeometry_ = function(t, e) {
				for (var i = e.getCoordinates(), r = 0, o = i.length; r < o; ++r)
					for (var n = i[r], s = 0, a = n.length - 1; s < a; ++s) {
						var h = n.slice(s, s + 2),
							l = {
								feature: t,
								segment: h
							};
						this.rBush_.insert(ft(h), l)
					}
			}, Wm.prototype.writeMultiPointGeometry_ = function(t, e) {
				for (var i = e.getCoordinates(), r = 0, o = i.length; r < o; ++r) {
					var n = i[r],
						n = {
							feature: t,
							segment: [n, n]
						};
					this.rBush_.insert(e.getExtent(), n)
				}
			}, Wm.prototype.writeMultiPolygonGeometry_ = function(t, e) {
				for (var i = e.getCoordinates(), r = 0, o = i.length; r < o; ++r)
					for (var n = i[r], s = 0, a = n.length; s < a; ++s)
						for (var h = n[s], l = 0, u = h.length - 1; l < u; ++l) {
							var p = h.slice(l, l + 2),
								c = {
									feature: t,
									segment: p
								};
							this.rBush_.insert(ft(p), c)
						}
			}, Wm.prototype.writePointGeometry_ = function(t, e) {
				var i = e.getCoordinates(),
					i = {
						feature: t,
						segment: [i, i]
					};
				this.rBush_.insert(e.getExtent(), i)
			}, Wm.prototype.writePolygonGeometry_ = function(t, e) {
				for (var i = e.getCoordinates(), r = 0, o = i.length; r < o; ++r)
					for (var n = i[r], s = 0, a = n.length - 1; s < a; ++s) {
						var h = n.slice(s, s + 2),
							l = {
								feature: t,
								segment: h
							};
						this.rBush_.insert(ft(h), l)
					}
			}, Wm),
			zm = ((Ym = F) && (Vm.__proto__ = Ym), (Vm.prototype = Object.create(Ym && Ym.prototype))
				.constructor = Vm),
			pc = ((Um = Wa) && (Xm.__proto__ = Um), ((Xm.prototype = Object.create(Um && Um.prototype))
				.constructor = Xm).prototype.handleDownEvent = function(t) {
				if (this.lastFeature_ = this.featuresAtPixel_(t.pixel, t.map), this.lastCoordinate_ || !
					this.lastFeature_) return !1;
				this.lastCoordinate_ = t.coordinate, this.handleMoveEvent(t);
				var e = this.features_ || new Z([this.lastFeature_]);
				return this.dispatchEvent(new zm("translatestart", e, t.coordinate)), !0
			}, Xm.prototype.handleUpEvent = function(t) {
				if (this.lastCoordinate_) {
					this.lastCoordinate_ = null, this.handleMoveEvent(t);
					var e = this.features_ || new Z([this.lastFeature_]);
					return this.dispatchEvent(new zm("translateend", e, t.coordinate)), !0
				}
				return !1
			}, Xm.prototype.handleDragEvent = function(t) {
				var e, i, r;
				this.lastCoordinate_ && (e = t.coordinate, i = e[0] - this.lastCoordinate_[0], r = e[
					1] - this.lastCoordinate_[1], (t = this.features_ || new Z([this.lastFeature_]))
					.forEach(function(t) {
						var e = t.getGeometry();
						e.translate(i, r), t.setGeometry(e)
					}), this.lastCoordinate_ = e, this.dispatchEvent(new zm("translating", t, e)))
			}, Xm.prototype.handleMoveEvent = function(t) {
				var e = t.map.getViewport();
				this.featuresAtPixel_(t.pixel, t.map) ? (e.classList.remove(this.lastCoordinate_ ?
					"ol-grab" : "ol-grabbing"), e.classList.add(this.lastCoordinate_ ?
					"ol-grabbing" : "ol-grab")) : e.classList.remove("ol-grab", "ol-grabbing")
			}, Xm.prototype.featuresAtPixel_ = function(t, e) {
				return e.forEachFeatureAtPixel(t, function(t) {
					if (!this.features_ || ot(this.features_.getArray(), t)) return t
				}.bind(this), {
					layerFilter: this.layerFilter_,
					hitTolerance: this.hitTolerance_
				})
			}, Xm.prototype.getHitTolerance = function() {
				return this.hitTolerance_
			}, Xm.prototype.setHitTolerance = function(t) {
				this.hitTolerance_ = t
			}, Xm.prototype.setMap = function(t) {
				var e = this.getMap();
				Um.prototype.setMap.call(this, t), this.updateState_(e)
			}, Xm.prototype.handleActiveChanged_ = function() {
				this.updateState_(null)
			}, Xm.prototype.updateState_ = function(t) {
				var e = this.getMap(),
					i = this.getActive();
				e && i || (e = e || t) && e.getViewport().classList.remove("ol-grab", "ol-grabbing")
			}, Xm);

		function Xm(t) {
			var e, i = t || {};
			Um.call(this, i), this.lastCoordinate_ = null, this.features_ = void 0 !== i.features ? i
				.features : null, t = i.layers ? "function" == typeof i.layers ? i.layers : (e = i.layers,
					function(t) {
						return ot(e, t)
					}) : R, this.layerFilter_ = t, this.hitTolerance_ = i.hitTolerance || 0, this
				.lastFeature_ = null, E(this, z(da), this.handleActiveChanged_, this)
		}

		function Vm(t, e, i) {
			Ym.call(this, t), this.features = e, this.coordinate = i
		}

		function Wm(t) {
			var e = t || {},
				t = e;
			t.handleDownEvent || (t.handleDownEvent = R), t.stopDown || (t.stopDown = I), Bm.call(this, t),
				this.source_ = e.source || null, this.vertex_ = void 0 === e.vertex || e.vertex, this
				.edge_ = void 0 === e.edge || e.edge, this.features_ = e.features || null, this
				.featuresListenerKeys_ = [], this.featureChangeListenerKeys_ = {}, this
				.indexedFeaturesExtents_ = {}, this.pendingFeatures_ = {}, this.pixelCoordinate_ = null,
				this.pixelTolerance_ = void 0 !== e.pixelTolerance ? e.pixelTolerance : 10, this
				.sortByDistance_ = function(t, e) {
					return jr(this.pixelCoordinate_, t.segment) - jr(this.pixelCoordinate_, e.segment)
				}.bind(this), this.rBush_ = new Pc, this.SEGMENT_WRITERS_ = {
					Point: this.writePointGeometry_,
					LineString: this.writeLineStringGeometry_,
					LinearRing: this.writeLineStringGeometry_,
					Polygon: this.writePolygonGeometry_,
					MultiPoint: this.writeMultiPointGeometry_,
					MultiLineString: this.writeMultiLineStringGeometry_,
					MultiPolygon: this.writeMultiPolygonGeometry_,
					GeometryCollection: this.writeGeometryCollectionGeometry_,
					Circle: this.writeCircleGeometry_
				}
		}

		function Km(t) {
			for (var e = [], i = 0, r = t.length; i < r; ++i) e.push(t[i].clone());
			return e
		}
		var Hm, Zm = ((Hm = hi) && (qm.__proto__ = Hm), ((qm.prototype = Object.create(Hm && Hm.prototype))
				.constructor = qm).prototype.unlistenGeometriesChange_ = function() {
				if (this.geometries_)
					for (var t = 0, e = this.geometries_.length; t < e; ++t) x(this.geometries_[t], A
						.CHANGE, this.changed, this)
			}, qm.prototype.listenGeometriesChange_ = function() {
				if (this.geometries_)
					for (var t = 0, e = this.geometries_.length; t < e; ++t) E(this.geometries_[t], A
						.CHANGE, this.changed, this)
			}, qm.prototype.clone = function() {
				var t = new qm(null);
				return t.setGeometries(this.geometries_), t
			}, qm.prototype.closestPointXY = function(t, e, i, r) {
				if (r < mt(this.getExtent(), t, e)) return r;
				for (var o = this.geometries_, n = 0, s = o.length; n < s; ++n) r = o[n].closestPointXY(
					t, e, i, r);
				return r
			}, qm.prototype.containsXY = function(t, e) {
				for (var i = this.geometries_, r = 0, o = i.length; r < o; ++r)
					if (i[r].containsXY(t, e)) return !0;
				return !1
			}, qm.prototype.computeExtent = function(t) {
				Tt(t);
				for (var e = this.geometries_, i = 0, r = e.length; i < r; ++i) bt(t, e[i].getExtent());
				return t
			}, qm.prototype.getGeometries = function() {
				return Km(this.geometries_)
			}, qm.prototype.getGeometriesArray = function() {
				return this.geometries_
			}, qm.prototype.getSimplifiedGeometry = function(t) {
				if (this.simplifiedGeometryRevision != this.getRevision() && (_(this
							.simplifiedGeometryCache), this.simplifiedGeometryMaxMinSquaredTolerance =
						0, this.simplifiedGeometryRevision = this.getRevision()), t < 0 || 0 !== this
					.simplifiedGeometryMaxMinSquaredTolerance && t < this
					.simplifiedGeometryMaxMinSquaredTolerance) return this;
				var e = t.toString();
				if (this.simplifiedGeometryCache.hasOwnProperty(e)) return this.simplifiedGeometryCache[
					e];
				for (var i = [], r = this.geometries_, o = !1, n = 0, s = r.length; n < s; ++n) {
					var a = r[n],
						h = a.getSimplifiedGeometry(t);
					i.push(h), h !== a && (o = !0)
				}
				if (o) {
					var l = new qm(null);
					return l.setGeometriesArray(i), this.simplifiedGeometryCache[e] = l
				}
				return this.simplifiedGeometryMaxMinSquaredTolerance = t, this
			}, qm.prototype.getType = function() {
				return Ht.GEOMETRY_COLLECTION
			}, qm.prototype.intersectsExtent = function(t) {
				for (var e = this.geometries_, i = 0, r = e.length; i < r; ++i)
					if (e[i].intersectsExtent(t)) return !0;
				return !1
			}, qm.prototype.isEmpty = function() {
				return 0 === this.geometries_.length
			}, qm.prototype.rotate = function(t, e) {
				for (var i = this.geometries_, r = 0, o = i.length; r < o; ++r) i[r].rotate(t, e);
				this.changed()
			}, qm.prototype.scale = function(t, e, i) {
				for (var r = (r = i) || Gt(this.getExtent()), o = this.geometries_, n = 0, s = o
					.length; n < s; ++n) o[n].scale(t, e, r);
				this.changed()
			}, qm.prototype.setGeometries = function(t) {
				this.setGeometriesArray(Km(t))
			}, qm.prototype.setGeometriesArray = function(t) {
				this.unlistenGeometriesChange_(), this.geometries_ = t, this.listenGeometriesChange_(),
					this.changed()
			}, qm.prototype.applyTransform = function(t) {
				for (var e = this.geometries_, i = 0, r = e.length; i < r; ++i) e[i].applyTransform(t);
				this.changed()
			}, qm.prototype.translate = function(t, e) {
				for (var i = this.geometries_, r = 0, o = i.length; r < o; ++r) i[r].translate(t, e);
				this.changed()
			}, qm.prototype.disposeInternal = function() {
				this.unlistenGeometriesChange_(), Hm.prototype.disposeInternal.call(this)
			}, qm),
			Jp = function() {
				this.dataProjection = null, this.defaultFeatureProjection = null
			};

		function qm(t) {
			Hm.call(this), this.geometries_ = t || null, this.listenGeometriesChange_()
		}
		Jp.prototype.getReadOptions = function(t, e) {
			var i;
			return e && (i = {
				dataProjection: e.dataProjection || this.readProjection(t),
				featureProjection: e.featureProjection
			}), this.adaptOptions(i)
		}, Jp.prototype.adaptOptions = function(t) {
			return y({
				dataProjection: this.dataProjection,
				featureProjection: this.defaultFeatureProjection
			}, t)
		}, Jp.prototype.getLastExtent = function() {
			return null
		}, Jp.prototype.getType = function() {
			return a()
		}, Jp.prototype.readFeature = function(t, e) {
			return a()
		}, Jp.prototype.readFeatures = function(t, e) {
			return a()
		}, Jp.prototype.readGeometry = function(t, e) {
			return a()
		}, Jp.prototype.readProjection = function(t) {
			return a()
		}, Jp.prototype.writeFeature = function(t, e) {
			return a()
		}, Jp.prototype.writeFeatures = function(t, e) {
			return a()
		}, Jp.prototype.writeGeometry = function(t, e) {
			return a()
		};
		cc = Jp;

		function Jm(t, e, i) {
			var r, o = i ? ke(i.featureProjection) : null,
				n = i ? ke(i.dataProjection) : null,
				o = o && n && !Xe(o, n) ? Array.isArray(t) ? He(t, n, o) : (e ? t.clone() : t).transform(e ?
					o : n, e ? n : o) : t;
			return e && i && void 0 !== i.decimals && !Array.isArray(o) && (r = Math.pow(10, i.decimals),
				o === t && (o = t.clone()), o.applyTransform(function(t) {
					for (var e = 0, i = t.length; e < i; ++e) t[e] = Math.round(t[e] * r) / r;
					return t
				})), o
		}

		function Qm(t) {
			return "string" != typeof t ? null !== t ? t : null : JSON.parse(t) || null
		}
		var $m, Mc = (($m = cc) && (ev.__proto__ = $m), ((ev.prototype = Object.create($m && $m.prototype))
				.constructor = ev).prototype.getType = function() {
				return $d.JSON
			}, ev.prototype.readFeature = function(t, e) {
				return this.readFeatureFromObject(Qm(t), this.getReadOptions(t, e))
			}, ev.prototype.readFeatures = function(t, e) {
				return this.readFeaturesFromObject(Qm(t), this.getReadOptions(t, e))
			}, ev.prototype.readFeatureFromObject = function(t, e) {
				return a()
			}, ev.prototype.readFeaturesFromObject = function(t, e) {
				return a()
			}, ev.prototype.readGeometry = function(t, e) {
				return this.readGeometryFromObject(Qm(t), this.getReadOptions(t, e))
			}, ev.prototype.readGeometryFromObject = function(t, e) {
				return a()
			}, ev.prototype.readProjection = function(t) {
				return this.readProjectionFromObject(Qm(t))
			}, ev.prototype.readProjectionFromObject = function(t) {
				return a()
			}, ev.prototype.writeFeature = function(t, e) {
				return JSON.stringify(this.writeFeatureObject(t, e))
			}, ev.prototype.writeFeatureObject = function(t, e) {
				return a()
			}, ev.prototype.writeFeatures = function(t, e) {
				return JSON.stringify(this.writeFeaturesObject(t, e))
			}, ev.prototype.writeFeaturesObject = function(t, e) {
				return a()
			}, ev.prototype.writeGeometry = function(t, e) {
				return JSON.stringify(this.writeGeometryObject(t, e))
			}, ev.prototype.writeGeometryObject = function(t, e) {
				return a()
			}, ev),
			tv = {};

		function ev() {
			$m.call(this)
		}
		tv[Ht.POINT] = function(t) {
			return void 0 !== t.m && void 0 !== t.z ? new Oi([t.x, t.y, t.z, t.m], Kt.XYZM) : void 0 !==
				t.z ? new Oi([t.x, t.y, t.z], Kt.XYZ) : void 0 !== t.m ? new Oi([t.x, t.y, t.m], Kt
				.XYM) : new Oi([t.x, t.y])
		}, tv[Ht.LINE_STRING] = function(t) {
			var e = ov(t);
			return new Vr(t.paths[0], e)
		}, tv[Ht.POLYGON] = function(t) {
			var e = ov(t);
			return new Zi(t.rings, e)
		}, tv[Ht.MULTI_POINT] = function(t) {
			var e = ov(t);
			return new Jy(t.points, e)
		}, tv[Ht.MULTI_LINE_STRING] = function(t) {
			var e = ov(t);
			return new qy(t.paths, e)
		}, tv[Ht.MULTI_POLYGON] = function(t) {
			var e = ov(t);
			return new rm(t.rings, e)
		};
		var iv = {};

		function rv(t, e) {
			return t ? ("number" == typeof t.x && "number" == typeof t.y ? i = Ht.POINT : t.points ? i = Ht
				.MULTI_POINT : t.paths ? i = 1 === t.paths.length ? Ht.LINE_STRING : Ht
				.MULTI_LINE_STRING : t.rings && (r = ov(t), 1 === (r = function(t, e) {
					var i, r = [],
						o = [],
						n = [];
					for (h = 0, i = t.length; h < i; ++h) r.length = 0, Si(r, 0, t[h], e
						.length), zi(r, 0, r.length, e.length) ? o.push([t[h]]) : n.push(t[h]);
					for (; n.length;) {
						for (var s = n.shift(), a = !1, h = o.length - 1; 0 <= h; h--) {
							var l = o[h][0];
							if (xt(new Fi(l).getExtent(), new Fi(s).getExtent())) {
								o[h].push(s), a = !0;
								break
							}
						}
						a || o.push([s.reverse()])
					}
					return o
				}(t.rings, r)).length ? (i = Ht.POLYGON, t.rings = r[0]) : (i = Ht.MULTI_POLYGON, t
					.rings = r)), Jm((0, tv[i])(t), !1, e)) : null;
			var i, r
		}

		function ov(t) {
			var e = Kt.XY;
			return !0 === t.hasZ && !0 === t.hasM ? e = Kt.XYZM : !0 === t.hasZ ? e = Kt.XYZ : !0 === t
				.hasM && (e = Kt.XYM), e
		}

		function nv(t) {
			t = t.getLayout();
			return {
				hasZ: t === Kt.XYZ || t === Kt.XYZM,
				hasM: t === Kt.XYM || t === Kt.XYZM
			}
		}

		function sv(t, e) {
			return (0, iv[t.getType()])(Jm(t, !0, e), e)
		}
		iv[Ht.POINT] = function(t, e) {
			var i, r = t.getCoordinates(),
				t = t.getLayout();
			return t === Kt.XYZ ? i = {
				x: r[0],
				y: r[1],
				z: r[2]
			} : t === Kt.XYM ? i = {
				x: r[0],
				y: r[1],
				m: r[2]
			} : t === Kt.XYZM ? i = {
				x: r[0],
				y: r[1],
				z: r[2],
				m: r[3]
			} : t === Kt.XY ? i = {
				x: r[0],
				y: r[1]
			} : $(!1, 34), i
		}, iv[Ht.LINE_STRING] = function(t, e) {
			var i = t,
				t = nv(i);
			return {
				hasZ: t.hasZ,
				hasM: t.hasM,
				paths: [i.getCoordinates()]
			}
		}, iv[Ht.POLYGON] = function(t, e) {
			var i = t,
				t = nv(i);
			return {
				hasZ: t.hasZ,
				hasM: t.hasM,
				rings: i.getCoordinates(!1)
			}
		}, iv[Ht.MULTI_POINT] = function(t, e) {
			var i = t,
				t = nv(i);
			return {
				hasZ: t.hasZ,
				hasM: t.hasM,
				points: i.getCoordinates()
			}
		}, iv[Ht.MULTI_LINE_STRING] = function(t, e) {
			var i = t,
				t = nv(i);
			return {
				hasZ: t.hasZ,
				hasM: t.hasM,
				paths: i.getCoordinates()
			}
		}, iv[Ht.MULTI_POLYGON] = function(t, e) {
			for (var i = nv(t), r = t.getCoordinates(!1), o = [], n = 0; n < r.length; n++)
				for (var s = r[n].length - 1; 0 <= s; s--) o.push(r[n][s]);
			return {
				hasZ: i.hasZ,
				hasM: i.hasM,
				rings: o
			}
		};
		var av, hv, lv, Bc = ((lv = Mc) && (_v.__proto__ = lv), ((_v.prototype = Object.create(lv && lv
					.prototype)).constructor = _v).prototype.readFeatureFromObject = function(t, e) {
					var i = t,
						r = rv(i.geometry, e),
						t = new et;
					return this.geometryName_ && t.setGeometryName(this.geometryName_), t.setGeometry(r),
						e && e.idField && i.attributes[e.idField] && t.setId(i.attributes[e.idField]), i
						.attributes && t.setProperties(i.attributes), t
				}, _v.prototype.readFeaturesFromObject = function(t, e) {
					var i = e || {};
					if (t.features) {
						var r = [],
							o = t.features;
						i.idField = t.objectIdFieldName;
						for (var n = 0, s = o.length; n < s; ++n) r.push(this.readFeatureFromObject(o[n],
							i));
						return r
					}
					return [this.readFeatureFromObject(t, i)]
				}, _v.prototype.readGeometryFromObject = rv, _v.prototype.readProjectionFromObject =
				function(t) {
					return t.spatialReference && void 0 !== t.spatialReference.wkid ? ke("EPSG:" + t
						.spatialReference.wkid) : null
				}, _v.prototype.writeGeometryObject = function(t, e) {
					return sv(t, this.adaptOptions(e))
				}, _v.prototype.writeFeatureObject = function(t, e) {
					e = this.adaptOptions(e);
					var i = {},
						r = t.getGeometry();
					r && (i.geometry = sv(r, e), e && e.featureProjection && (i.geometry
					.spatialReference = {
						wkid: Number(ke(e.featureProjection).getCode().split(":").pop())
					}));
					e = t.getProperties();
					return delete e[t.getGeometryName()], dt(e) ? i.attributes = {} : i.attributes = e, i
				}, _v.prototype.writeFeaturesObject = function(t, e) {
					e = this.adaptOptions(e);
					for (var i = [], r = 0, o = t.length; r < o; ++r) i.push(this.writeFeatureObject(t[r],
						e));
					return {
						features: i
					}
				}, _v),
			ru = ((hv = cc) && (dv.__proto__ = hv), ((dv.prototype = Object.create(hv && hv.prototype))
				.constructor = dv).prototype.getType = function() {
				return $d.XML
			}, dv.prototype.readFeature = function(t, e) {
				if (t) {
					if ("string" != typeof t) return h_(t) ? this.readFeatureFromDocument(t, e) : this
						.readFeatureFromNode(t, e);
					t = l_(t);
					return this.readFeatureFromDocument(t, e)
				}
				return null
			}, dv.prototype.readFeatureFromDocument = function(t, e) {
				e = this.readFeaturesFromDocument(t, e);
				return 0 < e.length ? e[0] : null
			}, dv.prototype.readFeatureFromNode = function(t, e) {
				return null
			}, dv.prototype.readFeatures = function(t, e) {
				if (t) {
					if ("string" != typeof t) return h_(t) ? this.readFeaturesFromDocument(t, e) : this
						.readFeaturesFromNode(t, e);
					t = l_(t);
					return this.readFeaturesFromDocument(t, e)
				}
				return []
			}, dv.prototype.readFeaturesFromDocument = function(t, e) {
				for (var i = [], r = t.firstChild; r; r = r.nextSibling) r.nodeType == Node
					.ELEMENT_NODE && st(i, this.readFeaturesFromNode(r, e));
				return i
			}, dv.prototype.readFeaturesFromNode = function(t, e) {
				return a()
			}, dv.prototype.readGeometry = function(t, e) {
				if (t) {
					if ("string" != typeof t) return h_(t) ? this.readGeometryFromDocument(t, e) : this
						.readGeometryFromNode(t, e);
					t = l_(t);
					return this.readGeometryFromDocument(t, e)
				}
				return null
			}, dv.prototype.readGeometryFromDocument = function(t, e) {
				return null
			}, dv.prototype.readGeometryFromNode = function(t, e) {
				return null
			}, dv.prototype.readProjection = function(t) {
				if (t) {
					if ("string" != typeof t) return h_(t) ? this.readProjectionFromDocument(t) : this
						.readProjectionFromNode(t);
					t = l_(t);
					return this.readProjectionFromDocument(t)
				}
				return null
			}, dv.prototype.readProjectionFromDocument = function(t) {
				return this.dataProjection
			}, dv.prototype.readProjectionFromNode = function(t) {
				return this.dataProjection
			}, dv.prototype.writeFeature = function(t, e) {
				e = this.writeFeatureNode(t, e);
				return this.xmlSerializer_.serializeToString(e)
			}, dv.prototype.writeFeatureNode = function(t, e) {
				return null
			}, dv.prototype.writeFeatures = function(t, e) {
				e = this.writeFeaturesNode(t, e);
				return this.xmlSerializer_.serializeToString(e)
			}, dv.prototype.writeFeaturesNode = function(t, e) {
				return null
			}, dv.prototype.writeGeometry = function(t, e) {
				e = this.writeGeometryNode(t, e);
				return this.xmlSerializer_.serializeToString(e)
			}, dv.prototype.writeGeometryNode = function(t, e) {
				return null
			}, dv),
			uv = "http://www.opengis.net/gml",
			pv = /^[\s\xa0]*$/,
			Gl = ((av = ru) && (cv.__proto__ = av), ((cv.prototype = Object.create(av && av.prototype))
				.constructor = cv).prototype.readFeaturesInternal = function(t, e) {
				var i = t.localName,
					r = null;
				if ("FeatureCollection" == i) r = S_([], this.FEATURE_COLLECTION_PARSERS, t, e, this);
				else if ("featureMembers" == i || "featureMember" == i) {
					var o = e[0],
						n = o.featureType,
						s = o.featureNS;
					if (!n && t.childNodes) {
						n = [], s = {};
						for (var a = 0, h = t.childNodes.length; a < h; ++a) {
							var l = t.childNodes[a];
							if (1 === l.nodeType) {
								var u = l.nodeName.split(":").pop();
								if (-1 === n.indexOf(u)) {
									var p, c = "",
										d = 0,
										_ = l.namespaceURI;
									for (p in s) {
										if (s[p] === _) {
											c = p;
											break
										}++d
									}
									c || (s[c = "p" + d] = _), n.push(c + ":" + u)
								}
							}
						}
						"featureMember" != i && (o.featureType = n, o.featureNS = s)
					}
					"string" == typeof s && (o = s, (s = {}).p0 = o);
					var f, g = {},
						y = Array.isArray(n) ? n : [n];
					for (f in s) {
						for (var m = {}, v = 0, x = y.length; v < x; ++v)(-1 === y[v].indexOf(":") ?
							"p0" : y[v].split(":")[0]) === f && (m[y[v].split(":").pop()] = (
							"featureMembers" == i ? p_ : c_)(this.readFeatureElement, this));
						g[s[f]] = m
					}
					r = S_("featureMember" == i ? void 0 : [], g, t, e)
				}
				return null === r && (r = []), r
			}, cv.prototype.readGeometryElement = function(t, e) {
				var i = e[0];
				i.srsName = t.firstElementChild.getAttribute("srsName"), i.srsDimension = t
					.firstElementChild.getAttribute("srsDimension");
				e = S_(null, this.GEOMETRY_PARSERS, t, e, this);
				return e ? Jm(e, !1, i) : void 0
			}, cv.prototype.readFeatureElementInternal = function(t, e, i) {
				for (var r, o = {}, n = t.firstElementChild; n; n = n.nextElementSibling) {
					var s = void 0,
						a = n.localName;
					0 === n.childNodes.length || 1 === n.childNodes.length && (3 === n.firstChild
							.nodeType || 4 === n.firstChild.nodeType) ? (s = a_(n, !1), pv.test(s) && (
							s = void 0)) : (i && (s = this.readGeometryElement(n, e)), s ?
							"boundedBy" !== a && (r = a) : s = this.readFeatureElementInternal(n, e, !1)
							), o[a] ? (o[a] instanceof Array || (o[a] = [o[a]]), o[a].push(s)) : o[a] =
						s;
					var h = n.attributes.length;
					if (0 < h) {
						o[a] = {
							_content_: o[a]
						};
						for (var l = 0; l < h; l++) {
							var u = n.attributes[l].name;
							o[a][u] = n.attributes[l].value
						}
					}
				}
				if (i) {
					var p = new et(o);
					r && p.setGeometryName(r);
					var c = t.getAttribute("fid") || (c = this.namespace, t.getAttributeNS(c, "id") ||
						"");
					return c && p.setId(c), p
				}
				return o
			}, cv.prototype.readFeatureElement = function(t, e) {
				return this.readFeatureElementInternal(t, e, !0)
			}, cv.prototype.readPoint = function(t, e) {
				e = this.readFlatCoordinatesFromNode_(t, e);
				if (e) return new Oi(e, Kt.XYZ)
			}, cv.prototype.readMultiPoint = function(t, e) {
				e = S_([], this.MULTIPOINT_PARSERS_, t, e, this);
				return e ? new Jy(e) : void 0
			}, cv.prototype.readMultiLineString = function(t, e) {
				e = S_([], this.MULTILINESTRING_PARSERS_, t, e, this);
				if (e) return new qy(e)
			}, cv.prototype.readMultiPolygon = function(t, e) {
				e = S_([], this.MULTIPOLYGON_PARSERS_, t, e, this);
				if (e) return new rm(e)
			}, cv.prototype.pointMemberParser_ = function(t, e) {
				E_(this.POINTMEMBER_PARSERS_, t, e, this)
			}, cv.prototype.lineStringMemberParser_ = function(t, e) {
				E_(this.LINESTRINGMEMBER_PARSERS_, t, e, this)
			}, cv.prototype.polygonMemberParser_ = function(t, e) {
				E_(this.POLYGONMEMBER_PARSERS_, t, e, this)
			}, cv.prototype.readLineString = function(t, e) {
				e = this.readFlatCoordinatesFromNode_(t, e);
				return e ? new Vr(e, Kt.XYZ) : void 0
			}, cv.prototype.readFlatLinearRing_ = function(t, e) {
				return S_(null, this.GEOMETRY_FLAT_COORDINATES_PARSERS, t, e, this) || void 0
			}, cv.prototype.readLinearRing = function(t, e) {
				e = this.readFlatCoordinatesFromNode_(t, e);
				if (e) return new Fi(e, Kt.XYZ)
			}, cv.prototype.readPolygon = function(t, e) {
				var i = S_([null], this.FLAT_LINEAR_RINGS_PARSERS, t, e, this);
				if (i && i[0]) {
					for (var r = i[0], o = [r.length], n = 1, s = i.length; n < s; ++n) st(r, i[n]), o
						.push(r.length);
					return new Zi(r, Kt.XYZ, o)
				}
			}, cv.prototype.readFlatCoordinatesFromNode_ = function(t, e) {
				return S_(null, this.GEOMETRY_FLAT_COORDINATES_PARSERS, t, e, this)
			}, cv.prototype.readGeometryFromNode = function(t, e) {
				return this.readGeometryElement(t, [this.getReadOptions(t, e || {})]) || null
			}, cv.prototype.readFeaturesFromNode = function(t, e) {
				var i = {
					featureType: this.featureType,
					featureNS: this.featureNS
				};
				return e && y(i, this.getReadOptions(t, e)), this.readFeaturesInternal(t, [i]) || []
			}, cv.prototype.readProjectionFromNode = function(t) {
				return ke(this.srsName || t.firstElementChild.getAttribute("srsName"))
			}, cv);

		function cv(t) {
			av.call(this);
			t = t || {};
			this.featureType = t.featureType, this.featureNS = t.featureNS, this.srsName = t.srsName, this
				.schemaLocation = "", this.FEATURE_COLLECTION_PARSERS = {}, this.FEATURE_COLLECTION_PARSERS[
					this.namespace] = {
					featureMember: p_(this.readFeaturesInternal),
					featureMembers: c_(this.readFeaturesInternal)
				}
		}

		function dv() {
			hv.call(this), this.xmlSerializer_ = new XMLSerializer
		}

		function _v(t) {
			t = t || {};
			lv.call(this), this.geometryName_ = t.geometryName
		}
		Gl.prototype.namespace = uv, Gl.prototype.FLAT_LINEAR_RINGS_PARSERS = {
			"http://www.opengis.net/gml": {}
		}, Gl.prototype.GEOMETRY_FLAT_COORDINATES_PARSERS = {
			"http://www.opengis.net/gml": {}
		}, Gl.prototype.GEOMETRY_PARSERS = {
			"http://www.opengis.net/gml": {}
		}, Gl.prototype.MULTIPOINT_PARSERS_ = {
			"http://www.opengis.net/gml": {
				pointMember: p_(Gl.prototype.pointMemberParser_),
				pointMembers: p_(Gl.prototype.pointMemberParser_)
			}
		}, Gl.prototype.MULTILINESTRING_PARSERS_ = {
			"http://www.opengis.net/gml": {
				lineStringMember: p_(Gl.prototype.lineStringMemberParser_),
				lineStringMembers: p_(Gl.prototype.lineStringMemberParser_)
			}
		}, Gl.prototype.MULTIPOLYGON_PARSERS_ = {
			"http://www.opengis.net/gml": {
				polygonMember: p_(Gl.prototype.polygonMemberParser_),
				polygonMembers: p_(Gl.prototype.polygonMemberParser_)
			}
		}, Gl.prototype.POINTMEMBER_PARSERS_ = {
			"http://www.opengis.net/gml": {
				Point: p_(Gl.prototype.readFlatCoordinatesFromNode_)
			}
		}, Gl.prototype.LINESTRINGMEMBER_PARSERS_ = {
			"http://www.opengis.net/gml": {
				LineString: p_(Gl.prototype.readLineString)
			}
		}, Gl.prototype.POLYGONMEMBER_PARSERS_ = {
			"http://www.opengis.net/gml": {
				Polygon: p_(Gl.prototype.readPolygon)
			}
		}, Gl.prototype.RING_PARSERS = {
			"http://www.opengis.net/gml": {
				LinearRing: c_(Gl.prototype.readFlatLinearRing_)
			}
		};
		var fv = Gl;

		function gv(t) {
			return yv(a_(t, !1))
		}

		function yv(t) {
			t = /^\s*(true|1)|(false|0)\s*$/.exec(t);
			return t ? void 0 !== t[1] || !1 : void 0
		}

		function mv(t) {
			t = a_(t, !1), t = Date.parse(t);
			return isNaN(t) ? void 0 : t / 1e3
		}

		function vv(t) {
			return xv(a_(t, !1))
		}

		function xv(t) {
			t = /^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)\s*$/i.exec(t);
			return t ? parseFloat(t[1]) : void 0
		}

		function Ev(t) {
			return Sv(a_(t, !1))
		}

		function Sv(t) {
			t = /^\s*(\d+)\s*$/.exec(t);
			return t ? parseInt(t[1], 10) : void 0
		}

		function Cv(t) {
			return a_(t, !1).trim()
		}

		function wv(t, e) {
			Iv(t, e ? "1" : "0")
		}

		function Tv(t, e) {
			e = e.toPrecision();
			t.appendChild(o_.createTextNode(e))
		}

		function Rv(t, e) {
			e = e.toString();
			t.appendChild(o_.createTextNode(e))
		}

		function Iv(t, e) {
			t.appendChild(o_.createTextNode(e))
		}
		var Lv, bv = {
				MultiLineString: "lineStringMember",
				MultiCurve: "curveMember",
				MultiPolygon: "polygonMember",
				MultiSurface: "surfaceMember"
			},
			Ol = ((Lv = fv) && (Pv.__proto__ = Lv), ((Pv.prototype = Object.create(Lv && Lv.prototype))
				.constructor = Pv).prototype.readMultiCurve_ = function(t, e) {
				e = S_([], this.MULTICURVE_PARSERS_, t, e, this);
				return e ? new qy(e) : void 0
			}, Pv.prototype.readMultiSurface_ = function(t, e) {
				e = S_([], this.MULTISURFACE_PARSERS_, t, e, this);
				if (e) return new rm(e)
			}, Pv.prototype.curveMemberParser_ = function(t, e) {
				E_(this.CURVEMEMBER_PARSERS_, t, e, this)
			}, Pv.prototype.surfaceMemberParser_ = function(t, e) {
				E_(this.SURFACEMEMBER_PARSERS_, t, e, this)
			}, Pv.prototype.readPatch_ = function(t, e) {
				return S_([null], this.PATCHES_PARSERS_, t, e, this)
			}, Pv.prototype.readSegment_ = function(t, e) {
				return S_([null], this.SEGMENTS_PARSERS_, t, e, this)
			}, Pv.prototype.readPolygonPatch_ = function(t, e) {
				return S_([null], this.FLAT_LINEAR_RINGS_PARSERS, t, e, this)
			}, Pv.prototype.readLineStringSegment_ = function(t, e) {
				return S_([null], this.GEOMETRY_FLAT_COORDINATES_PARSERS, t, e, this)
			}, Pv.prototype.interiorParser_ = function(t, e) {
				t = S_(void 0, this.RING_PARSERS, t, e, this);
				t && e[e.length - 1].push(t)
			}, Pv.prototype.exteriorParser_ = function(t, e) {
				t = S_(void 0, this.RING_PARSERS, t, e, this);
				t && (e[e.length - 1][0] = t)
			}, Pv.prototype.readSurface_ = function(t, e) {
				var i = S_([null], this.SURFACE_PARSERS_, t, e, this);
				if (i && i[0]) {
					for (var r = i[0], o = [r.length], n = 1, s = i.length; n < s; ++n) st(r, i[n]), o
						.push(r.length);
					return new Zi(r, Kt.XYZ, o)
				}
			}, Pv.prototype.readCurve_ = function(t, e) {
				e = S_([null], this.CURVE_PARSERS_, t, e, this);
				return e ? new Vr(e, Kt.XYZ) : void 0
			}, Pv.prototype.readEnvelope_ = function(t, e) {
				e = S_([null], this.ENVELOPE_PARSERS_, t, e, this);
				return wt(e[1][0], e[1][1], e[2][0], e[2][1])
			}, Pv.prototype.readFlatPos_ = function(t, e) {
				for (var i, r = a_(t, !1), o = /^\s*([+\-]?\d*\.?\d+(?:[eE][+\-]?\d+)?)\s*/, n = []; i =
					o.exec(r);) n.push(parseFloat(i[1])), r = r.substr(i[0].length);
				if ("" === r) {
					var s, a, t = e[0].srsName,
						e = "enu";
					if (t && (e = ke(t).getAxisOrientation()), "neu" === e)
						for (s = 0, a = n.length; s < a; s += 3) {
							var h = n[s],
								l = n[s + 1];
							n[s] = l, n[s + 1] = h
						}
					e = n.length;
					if (2 == e && n.push(0), 0 !== e) return n
				}
			}, Pv.prototype.readFlatPosList_ = function(t, e) {
				var i = a_(t, !1).replace(/^\s*|\s*$/g, ""),
					r = e[0],
					e = r.srsName,
					r = r.srsDimension,
					o = "enu";
				e && (o = ke(e).getAxisOrientation());
				var n, s, a, h = i.split(/\s+/),
					l = 2;
				t.getAttribute("srsDimension") ? l = Sv(t.getAttribute("srsDimension")) : t
					.getAttribute("dimension") ? l = Sv(t.getAttribute("dimension")) : t.parentNode
					.getAttribute("srsDimension") ? l = Sv(t.parentNode.getAttribute("srsDimension")) :
					r && (l = Sv(r));
				for (var u = [], p = 0, c = h.length; p < c; p += l) n = parseFloat(h[p]), s =
					parseFloat(h[p + 1]), a = 3 === l ? parseFloat(h[p + 2]) : 0, "en" === o.substr(0,
						2) ? u.push(n, s, a) : u.push(s, n, a);
				return u
			}, Pv.prototype.writePos_ = function(t, e, i) {
				var r = i[i.length - 1],
					o = r.hasZ,
					i = o ? "3" : "2";
				t.setAttribute("srsDimension", i);
				i = r.srsName, r = "enu";
				i && (r = ke(i).getAxisOrientation());
				e = e.getCoordinates(), r = "en" === r.substr(0, 2) ? e[0] + " " + e[1] : e[1] + " " +
					e[0];
				o && (r += " " + (e[2] || 0)), Iv(t, r)
			}, Pv.prototype.getCoords_ = function(t, e, i) {
				var r = "enu";
				e && (r = ke(e).getAxisOrientation());
				r = "en" === r.substr(0, 2) ? t[0] + " " + t[1] : t[1] + " " + t[0];
				return i && (r += " " + (t[2] || 0)), r
			}, Pv.prototype.writePosList_ = function(t, e, i) {
				var r = i[i.length - 1],
					o = r.hasZ,
					i = o ? "3" : "2";
				t.setAttribute("srsDimension", i);
				for (var n, s = r.srsName, a = e.getCoordinates(), h = a.length, l = new Array(h), u =
					0; u < h; ++u) n = a[u], l[u] = this.getCoords_(n, s, o);
				Iv(t, l.join(" "))
			}, Pv.prototype.writePoint_ = function(t, e, i) {
				var r = i[i.length - 1].srsName;
				r && t.setAttribute("srsName", r);
				r = s_(t.namespaceURI, "pos");
				t.appendChild(r), this.writePos_(r, e, i)
			}, Pv.prototype.writeEnvelope = function(t, e, i) {
				var r = i[i.length - 1].srsName;
				r && t.setAttribute("srsName", r);
				e = [e[0] + " " + e[1], e[2] + " " + e[3]];
				w_({
					node: t
				}, this.ENVELOPE_SERIALIZERS_, m_, e, i, ["lowerCorner", "upperCorner"], this)
			}, Pv.prototype.writeLinearRing_ = function(t, e, i) {
				var r = i[i.length - 1].srsName;
				r && t.setAttribute("srsName", r);
				r = s_(t.namespaceURI, "posList");
				t.appendChild(r), this.writePosList_(r, e, i)
			}, Pv.prototype.RING_NODE_FACTORY_ = function(t, e, i) {
				var r = e[e.length - 1],
					o = r.node,
					e = r.exteriorWritten;
				return void 0 === e && (r.exteriorWritten = !0), s_(o.namespaceURI, void 0 !== e ?
					"interior" : "exterior")
			}, Pv.prototype.writeSurfaceOrPolygon_ = function(t, e, i) {
				var r, o = i[i.length - 1],
					n = o.hasZ,
					o = o.srsName;
				"PolygonPatch" !== t.nodeName && o && t.setAttribute("srsName", o), "Polygon" === t
					.nodeName || "PolygonPatch" === t.nodeName ? (r = e.getLinearRings(), w_({
						node: t,
						hasZ: n,
						srsName: o
					}, this.RING_SERIALIZERS_, this.RING_NODE_FACTORY_, r, i, void 0, this)) :
					"Surface" === t.nodeName && (r = s_(t.namespaceURI, "patches"), t.appendChild(r),
						this.writeSurfacePatches_(r, e, i))
			}, Pv.prototype.writeCurveOrLineString_ = function(t, e, i) {
				var r, o = i[i.length - 1].srsName;
				"LineStringSegment" !== t.nodeName && o && t.setAttribute("srsName", o),
					"LineString" === t.nodeName || "LineStringSegment" === t.nodeName ? (r = s_(t
						.namespaceURI, "posList"), t.appendChild(r), this.writePosList_(r, e, i)) :
					"Curve" === t.nodeName && (r = s_(t.namespaceURI, "segments"), t.appendChild(r),
						this.writeCurveSegments_(r, e, i))
			}, Pv.prototype.writeMultiSurfaceOrPolygon_ = function(t, e, i) {
				var r = i[i.length - 1],
					o = r.hasZ,
					n = r.srsName,
					r = r.surface;
				n && t.setAttribute("srsName", n);
				e = e.getPolygons();
				w_({
						node: t,
						hasZ: o,
						srsName: n,
						surface: r
					}, this.SURFACEORPOLYGONMEMBER_SERIALIZERS_, this
					.MULTIGEOMETRY_MEMBER_NODE_FACTORY_, e, i, void 0, this)
			}, Pv.prototype.writeMultiPoint_ = function(t, e, i) {
				var r = i[i.length - 1],
					o = r.srsName,
					r = r.hasZ;
				o && t.setAttribute("srsName", o);
				e = e.getPoints();
				w_({
					node: t,
					hasZ: r,
					srsName: o
				}, this.POINTMEMBER_SERIALIZERS_, y_("pointMember"), e, i, void 0, this)
			}, Pv.prototype.writeMultiCurveOrLineString_ = function(t, e, i) {
				var r = i[i.length - 1],
					o = r.hasZ,
					n = r.srsName,
					r = r.curve;
				n && t.setAttribute("srsName", n);
				e = e.getLineStrings();
				w_({
						node: t,
						hasZ: o,
						srsName: n,
						curve: r
					}, this.LINESTRINGORCURVEMEMBER_SERIALIZERS_, this
					.MULTIGEOMETRY_MEMBER_NODE_FACTORY_, e, i, void 0, this)
			}, Pv.prototype.writeRing_ = function(t, e, i) {
				var r = s_(t.namespaceURI, "LinearRing");
				t.appendChild(r), this.writeLinearRing_(r, e, i)
			}, Pv.prototype.writeSurfaceOrPolygonMember_ = function(t, e, i) {
				var r = this.GEOMETRY_NODE_FACTORY_(e, i);
				r && (t.appendChild(r), this.writeSurfaceOrPolygon_(r, e, i))
			}, Pv.prototype.writePointMember_ = function(t, e, i) {
				var r = s_(t.namespaceURI, "Point");
				t.appendChild(r), this.writePoint_(r, e, i)
			}, Pv.prototype.writeLineStringOrCurveMember_ = function(t, e, i) {
				var r = this.GEOMETRY_NODE_FACTORY_(e, i);
				r && (t.appendChild(r), this.writeCurveOrLineString_(r, e, i))
			}, Pv.prototype.writeSurfacePatches_ = function(t, e, i) {
				var r = s_(t.namespaceURI, "PolygonPatch");
				t.appendChild(r), this.writeSurfaceOrPolygon_(r, e, i)
			}, Pv.prototype.writeCurveSegments_ = function(t, e, i) {
				var r = s_(t.namespaceURI, "LineStringSegment");
				t.appendChild(r), this.writeCurveOrLineString_(r, e, i)
			}, Pv.prototype.writeGeometryElement = function(t, e, i) {
				var r = i[i.length - 1],
					o = y({}, r);
				o.node = t, r = Array.isArray(e) ? r.dataProjection ? He(e, r.featureProjection, r
					.dataProjection) : e : Jm(e, !0, r), w_(o, this.GEOMETRY_SERIALIZERS_, this
					.GEOMETRY_NODE_FACTORY_, [r], i, void 0, this)
			}, Pv.prototype.writeFeatureElement = function(t, e, i) {
				var r = e.getId();
				r && t.setAttribute("fid", r);
				var o = i[i.length - 1],
					n = o.featureNS,
					s = e.getGeometryName();
				o.serializers || (o.serializers = {}, o.serializers[n] = {});
				var a, h = e.getProperties(),
					l = [],
					u = [];
				for (a in h) {
					var p = h[a];
					null !== p && (l.push(a), u.push(p), a == s || "function" == typeof p
						.getSimplifiedGeometry ? a in o.serializers[n] || (o.serializers[n][a] = f_(
							this.writeGeometryElement, this)) : a in o.serializers[n] || (o
							.serializers[n][a] = f_(Iv)))
				}
				e = y({}, o);
				e.node = t, w_(e, o.serializers, y_(void 0, n), u, i, l)
			}, Pv.prototype.writeFeatureMembers_ = function(t, e, i) {
				var r = i[i.length - 1],
					o = r.featureType,
					n = r.featureNS,
					s = {};
				s[n] = {}, s[n][o] = f_(this.writeFeatureElement, this);
				r = y({}, r);
				r.node = t, w_(r, s, y_(o, n), e, i)
			}, Pv.prototype.MULTIGEOMETRY_MEMBER_NODE_FACTORY_ = function(t, e, i) {
				e = e[e.length - 1].node;
				return s_(this.namespace, bv[e.nodeName])
			}, Pv.prototype.GEOMETRY_NODE_FACTORY_ = function(t, e, i) {
				var r, o = e[e.length - 1],
					n = o.multiSurface,
					s = o.surface,
					e = o.curve,
					o = o.multiCurve;
				return Array.isArray(t) ? r = "Envelope" : "MultiPolygon" === (r = t.getType()) && !
					0 === n ? r = "MultiSurface" : "Polygon" === r && !0 === s ? r = "Surface" :
					"LineString" === r && !0 === e ? r = "Curve" : "MultiLineString" === r && !0 ===
					o && (r = "MultiCurve"), s_(this.namespace, r)
			}, Pv.prototype.writeGeometryNode = function(t, e) {
				e = this.adaptOptions(e);
				var i = s_(this.namespace, "geom"),
					r = {
						node: i,
						hasZ: this.hasZ,
						srsName: this.srsName,
						curve: this.curve_,
						surface: this.surface_,
						multiSurface: this.multiSurface_,
						multiCurve: this.multiCurve_
					};
				return e && y(r, e), this.writeGeometryElement(i, t, [r]), i
			}, Pv.prototype.writeFeaturesNode = function(t, e) {
				e = this.adaptOptions(e);
				var i = s_(this.namespace, "featureMembers");
				i.setAttributeNS(n_, "xsi:schemaLocation", this.schemaLocation);
				var r = {
					srsName: this.srsName,
					hasZ: this.hasZ,
					curve: this.curve_,
					surface: this.surface_,
					multiSurface: this.multiSurface_,
					multiCurve: this.multiCurve_,
					featureNS: this.featureNS,
					featureType: this.featureType
				};
				return e && y(r, e), this.writeFeatureMembers_(i, t, [r]), i
			}, Pv);

		function Pv(t) {
			t = t || {};
			Lv.call(this, t), this.surface_ = void 0 !== t.surface && t.surface, this.curve_ = void 0 !== t
				.curve && t.curve, this.multiCurve_ = void 0 === t.multiCurve || t.multiCurve, this
				.multiSurface_ = void 0 === t.multiSurface || t.multiSurface, this.schemaLocation = t
				.schemaLocation ||
				"http://www.opengis.net/gml http://schemas.opengis.net/gml/3.1.1/profiles/gmlsfProfile/1.0.0/gmlsf.xsd",
				this.hasZ = void 0 !== t.hasZ && t.hasZ
		}
		Ol.prototype.GEOMETRY_FLAT_COORDINATES_PARSERS = {
			"http://www.opengis.net/gml": {
				pos: c_(Ol.prototype.readFlatPos_),
				posList: c_(Ol.prototype.readFlatPosList_)
			}
		}, Ol.prototype.FLAT_LINEAR_RINGS_PARSERS = {
			"http://www.opengis.net/gml": {
				interior: Ol.prototype.interiorParser_,
				exterior: Ol.prototype.exteriorParser_
			}
		}, Ol.prototype.GEOMETRY_PARSERS = {
			"http://www.opengis.net/gml": {
				Point: c_(fv.prototype.readPoint),
				MultiPoint: c_(fv.prototype.readMultiPoint),
				LineString: c_(fv.prototype.readLineString),
				MultiLineString: c_(fv.prototype.readMultiLineString),
				LinearRing: c_(fv.prototype.readLinearRing),
				Polygon: c_(fv.prototype.readPolygon),
				MultiPolygon: c_(fv.prototype.readMultiPolygon),
				Surface: c_(Ol.prototype.readSurface_),
				MultiSurface: c_(Ol.prototype.readMultiSurface_),
				Curve: c_(Ol.prototype.readCurve_),
				MultiCurve: c_(Ol.prototype.readMultiCurve_),
				Envelope: c_(Ol.prototype.readEnvelope_)
			}
		}, Ol.prototype.MULTICURVE_PARSERS_ = {
			"http://www.opengis.net/gml": {
				curveMember: p_(Ol.prototype.curveMemberParser_),
				curveMembers: p_(Ol.prototype.curveMemberParser_)
			}
		}, Ol.prototype.MULTISURFACE_PARSERS_ = {
			"http://www.opengis.net/gml": {
				surfaceMember: p_(Ol.prototype.surfaceMemberParser_),
				surfaceMembers: p_(Ol.prototype.surfaceMemberParser_)
			}
		}, Ol.prototype.CURVEMEMBER_PARSERS_ = {
			"http://www.opengis.net/gml": {
				LineString: p_(fv.prototype.readLineString),
				Curve: p_(Ol.prototype.readCurve_)
			}
		}, Ol.prototype.SURFACEMEMBER_PARSERS_ = {
			"http://www.opengis.net/gml": {
				Polygon: p_(fv.prototype.readPolygon),
				Surface: p_(Ol.prototype.readSurface_)
			}
		}, Ol.prototype.SURFACE_PARSERS_ = {
			"http://www.opengis.net/gml": {
				patches: c_(Ol.prototype.readPatch_)
			}
		}, Ol.prototype.CURVE_PARSERS_ = {
			"http://www.opengis.net/gml": {
				segments: c_(Ol.prototype.readSegment_)
			}
		}, Ol.prototype.ENVELOPE_PARSERS_ = {
			"http://www.opengis.net/gml": {
				lowerCorner: p_(Ol.prototype.readFlatPosList_),
				upperCorner: p_(Ol.prototype.readFlatPosList_)
			}
		}, Ol.prototype.PATCHES_PARSERS_ = {
			"http://www.opengis.net/gml": {
				PolygonPatch: c_(Ol.prototype.readPolygonPatch_)
			}
		}, Ol.prototype.SEGMENTS_PARSERS_ = {
			"http://www.opengis.net/gml": {
				LineStringSegment: c_(Ol.prototype.readLineStringSegment_)
			}
		}, Ol.prototype.writeFeatures, Ol.prototype.RING_SERIALIZERS_ = {
			"http://www.opengis.net/gml": {
				exterior: f_(Ol.prototype.writeRing_),
				interior: f_(Ol.prototype.writeRing_)
			}
		}, Ol.prototype.ENVELOPE_SERIALIZERS_ = {
			"http://www.opengis.net/gml": {
				lowerCorner: f_(Iv),
				upperCorner: f_(Iv)
			}
		}, Ol.prototype.SURFACEORPOLYGONMEMBER_SERIALIZERS_ = {
			"http://www.opengis.net/gml": {
				surfaceMember: f_(Ol.prototype.writeSurfaceOrPolygonMember_),
				polygonMember: f_(Ol.prototype.writeSurfaceOrPolygonMember_)
			}
		}, Ol.prototype.POINTMEMBER_SERIALIZERS_ = {
			"http://www.opengis.net/gml": {
				pointMember: f_(Ol.prototype.writePointMember_)
			}
		}, Ol.prototype.LINESTRINGORCURVEMEMBER_SERIALIZERS_ = {
			"http://www.opengis.net/gml": {
				lineStringMember: f_(Ol.prototype.writeLineStringOrCurveMember_),
				curveMember: f_(Ol.prototype.writeLineStringOrCurveMember_)
			}
		}, Ol.prototype.GEOMETRY_SERIALIZERS_ = {
			"http://www.opengis.net/gml": {
				Curve: f_(Ol.prototype.writeCurveOrLineString_),
				MultiCurve: f_(Ol.prototype.writeMultiCurveOrLineString_),
				Point: f_(Ol.prototype.writePoint_),
				MultiPoint: f_(Ol.prototype.writeMultiPoint_),
				LineString: f_(Ol.prototype.writeCurveOrLineString_),
				MultiLineString: f_(Ol.prototype.writeMultiCurveOrLineString_),
				LinearRing: f_(Ol.prototype.writeLinearRing_),
				Polygon: f_(Ol.prototype.writeSurfaceOrPolygon_),
				MultiPolygon: f_(Ol.prototype.writeMultiSurfaceOrPolygon_),
				Surface: f_(Ol.prototype.writeSurfaceOrPolygon_),
				MultiSurface: f_(Ol.prototype.writeMultiSurfaceOrPolygon_),
				Envelope: f_(Ol.prototype.writeEnvelope)
			}
		};
		var Mv = Ol;
		Mv.prototype.writeFeatures, Mv.prototype.writeFeaturesNode;
		var Fv, Td = Mv,
			Ov = {
				MultiLineString: "lineStringMember",
				MultiCurve: "curveMember",
				MultiPolygon: "polygonMember",
				MultiSurface: "surfaceMember"
			},
			Gd = ((Fv = fv) && (Av.__proto__ = Fv), ((Av.prototype = Object.create(Fv && Fv.prototype))
				.constructor = Av).prototype.readFlatCoordinates_ = function(t, e) {
				var t = a_(t, !1).replace(/^\s*|\s*$/g, ""),
					e = e[0].srsName,
					i = "enu";
				!e || (e = ke(e)) && (i = e.getAxisOrientation());
				for (var r = t.trim().split(/\s+/), o = [], n = 0, s = r.length; n < s; n++) {
					var a = r[n].split(/,+/),
						h = parseFloat(a[0]),
						l = parseFloat(a[1]),
						a = 3 === a.length ? parseFloat(a[2]) : 0;
					"en" === i.substr(0, 2) ? o.push(h, l, a) : o.push(l, h, a)
				}
				return o
			}, Av.prototype.readBox_ = function(t, e) {
				e = S_([null], this.BOX_PARSERS_, t, e, this);
				return wt(e[1][0], e[1][1], e[1][3], e[1][4])
			}, Av.prototype.innerBoundaryIsParser_ = function(t, e) {
				t = S_(void 0, this.RING_PARSERS, t, e, this);
				t && e[e.length - 1].push(t)
			}, Av.prototype.outerBoundaryIsParser_ = function(t, e) {
				t = S_(void 0, this.RING_PARSERS, t, e, this);
				t && (e[e.length - 1][0] = t)
			}, Av.prototype.GEOMETRY_NODE_FACTORY_ = function(t, e, i) {
				var r, o = e[e.length - 1],
					n = o.multiSurface,
					e = o.surface,
					o = o.multiCurve;
				return Array.isArray(t) ? r = "Envelope" : "MultiPolygon" === (r = t.getType()) && !
					0 === n ? r = "MultiSurface" : "Polygon" === r && !0 === e ? r = "Surface" :
					"MultiLineString" === r && !0 === o && (r = "MultiCurve"), s_(
						"http://www.opengis.net/gml", r)
			}, Av.prototype.writeFeatureElement = function(t, e, i) {
				var r = e.getId();
				r && t.setAttribute("fid", r);
				var o = i[i.length - 1],
					n = o.featureNS,
					s = e.getGeometryName();
				o.serializers || (o.serializers = {}, o.serializers[n] = {});
				var a, h = e.getProperties(),
					l = [],
					u = [];
				for (a in h) {
					var p = h[a];
					null !== p && (l.push(a), u.push(p), a == s || "function" == typeof p
						.getSimplifiedGeometry ? a in o.serializers[n] || (o.serializers[n][a] = f_(
							this.writeGeometryElement, this)) : a in o.serializers[n] || (o
							.serializers[n][a] = f_(Iv)))
				}
				e = y({}, o);
				e.node = t, w_(e, o.serializers, y_(void 0, n), u, i, l)
			}, Av.prototype.writeCurveOrLineString_ = function(t, e, i) {
				var r, o = i[i.length - 1].srsName;
				"LineStringSegment" !== t.nodeName && o && t.setAttribute("srsName", o),
					"LineString" === t.nodeName || "LineStringSegment" === t.nodeName ? (r = this
						.createCoordinatesNode_(t.namespaceURI), t.appendChild(r), this
						.writeCoordinates_(r, e, i)) : "Curve" === t.nodeName && (r = s_(t.namespaceURI,
						"segments"), t.appendChild(r), this.writeCurveSegments_(r, e, i))
			}, Av.prototype.writeLineStringOrCurveMember_ = function(t, e, i) {
				var r = this.GEOMETRY_NODE_FACTORY_(e, i);
				r && (t.appendChild(r), this.writeCurveOrLineString_(r, e, i))
			}, Av.prototype.writeMultiCurveOrLineString_ = function(t, e, i) {
				var r = i[i.length - 1],
					o = r.hasZ,
					n = r.srsName,
					r = r.curve;
				n && t.setAttribute("srsName", n);
				e = e.getLineStrings();
				w_({
						node: t,
						hasZ: o,
						srsName: n,
						curve: r
					}, this.LINESTRINGORCURVEMEMBER_SERIALIZERS_, this
					.MULTIGEOMETRY_MEMBER_NODE_FACTORY_, e, i, void 0, this)
			}, Av.prototype.writeGeometryElement = function(t, e, i) {
				var r = i[i.length - 1],
					o = y({}, r);
				o.node = t, r = Array.isArray(e) ? r.dataProjection ? He(e, r.featureProjection, r
					.dataProjection) : e : Jm(e, !0, r), w_(o, this.GEOMETRY_SERIALIZERS_, this
					.GEOMETRY_NODE_FACTORY_, [r], i, void 0, this)
			}, Av.prototype.createCoordinatesNode_ = function(t) {
				t = s_(t, "coordinates");
				return t.setAttribute("decimal", "."), t.setAttribute("cs", ","), t.setAttribute("ts",
					" "), t
			}, Av.prototype.writeCoordinates_ = function(t, e, i) {
				for (var i = i[i.length - 1], r = i.hasZ, o = i.srsName, n = e.getCoordinates(), s = n
						.length, a = new Array(s), h = 0; h < s; ++h) {
					var l = n[h];
					a[h] = this.getCoords_(l, o, r)
				}
				Iv(t, a.join(" "))
			}, Av.prototype.writeCurveSegments_ = function(t, e, i) {
				var r = s_(t.namespaceURI, "LineStringSegment");
				t.appendChild(r), this.writeCurveOrLineString_(r, e, i)
			}, Av.prototype.writeSurfaceOrPolygon_ = function(t, e, i) {
				var r, o = i[i.length - 1],
					n = o.hasZ,
					o = o.srsName;
				"PolygonPatch" !== t.nodeName && o && t.setAttribute("srsName", o), "Polygon" === t
					.nodeName || "PolygonPatch" === t.nodeName ? (r = e.getLinearRings(), w_({
						node: t,
						hasZ: n,
						srsName: o
					}, this.RING_SERIALIZERS_, this.RING_NODE_FACTORY_, r, i, void 0, this)) :
					"Surface" === t.nodeName && (r = s_(t.namespaceURI, "patches"), t.appendChild(r),
						this.writeSurfacePatches_(r, e, i))
			}, Av.prototype.RING_NODE_FACTORY_ = function(t, e, i) {
				var r = e[e.length - 1],
					o = r.node,
					e = r.exteriorWritten;
				return void 0 === e && (r.exteriorWritten = !0), s_(o.namespaceURI, void 0 !== e ?
					"innerBoundaryIs" : "outerBoundaryIs")
			}, Av.prototype.writeSurfacePatches_ = function(t, e, i) {
				var r = s_(t.namespaceURI, "PolygonPatch");
				t.appendChild(r), this.writeSurfaceOrPolygon_(r, e, i)
			}, Av.prototype.writeRing_ = function(t, e, i) {
				var r = s_(t.namespaceURI, "LinearRing");
				t.appendChild(r), this.writeLinearRing_(r, e, i)
			}, Av.prototype.getCoords_ = function(t, e, i) {
				var r = "enu";
				e && (r = ke(e).getAxisOrientation());
				r = "en" === r.substr(0, 2) ? t[0] + "," + t[1] : t[1] + "," + t[0];
				return i && (r += "," + (t[2] || 0)), r
			}, Av.prototype.writePoint_ = function(t, e, i) {
				var r = i[i.length - 1],
					o = r.hasZ,
					i = r.srsName;
				i && t.setAttribute("srsName", i);
				r = this.createCoordinatesNode_(t.namespaceURI);
				t.appendChild(r);
				e = e.getCoordinates();
				Iv(r, this.getCoords_(e, i, o))
			}, Av.prototype.writeMultiPoint_ = function(t, e, i) {
				var r = i[i.length - 1],
					o = r.hasZ,
					r = r.srsName;
				r && t.setAttribute("srsName", r);
				e = e.getPoints();
				w_({
					node: t,
					hasZ: o,
					srsName: r
				}, this.POINTMEMBER_SERIALIZERS_, y_("pointMember"), e, i, void 0, this)
			}, Av.prototype.writePointMember_ = function(t, e, i) {
				var r = s_(t.namespaceURI, "Point");
				t.appendChild(r), this.writePoint_(r, e, i)
			}, Av.prototype.writeLinearRing_ = function(t, e, i) {
				var r = i[i.length - 1].srsName;
				r && t.setAttribute("srsName", r);
				r = this.createCoordinatesNode_(t.namespaceURI);
				t.appendChild(r), this.writeCoordinates_(r, e, i)
			}, Av.prototype.writeMultiSurfaceOrPolygon_ = function(t, e, i) {
				var r = i[i.length - 1],
					o = r.hasZ,
					n = r.srsName,
					r = r.surface;
				n && t.setAttribute("srsName", n);
				e = e.getPolygons();
				w_({
						node: t,
						hasZ: o,
						srsName: n,
						surface: r
					}, this.SURFACEORPOLYGONMEMBER_SERIALIZERS_, this
					.MULTIGEOMETRY_MEMBER_NODE_FACTORY_, e, i, void 0, this)
			}, Av.prototype.writeSurfaceOrPolygonMember_ = function(t, e, i) {
				var r = this.GEOMETRY_NODE_FACTORY_(e, i);
				r && (t.appendChild(r), this.writeSurfaceOrPolygon_(r, e, i))
			}, Av.prototype.writeEnvelope = function(t, e, i) {
				var r = i[i.length - 1].srsName;
				r && t.setAttribute("srsName", r);
				e = [e[0] + " " + e[1], e[2] + " " + e[3]];
				w_({
					node: t
				}, this.ENVELOPE_SERIALIZERS_, m_, e, i, ["lowerCorner", "upperCorner"], this)
			}, Av.prototype.MULTIGEOMETRY_MEMBER_NODE_FACTORY_ = function(t, e, i) {
				e = e[e.length - 1].node;
				return s_("http://www.opengis.net/gml", Ov[e.nodeName])
			}, Av);

		function Av(t) {
			t = t || {};
			Fv.call(this, t), this.FEATURE_COLLECTION_PARSERS[uv].featureMember = p_(this
					.readFeaturesInternal), this.schemaLocation = t.schemaLocation ||
				"http://www.opengis.net/gml http://schemas.opengis.net/gml/2.1.2/feature.xsd"
		}
		Gd.prototype.GEOMETRY_FLAT_COORDINATES_PARSERS = {
			"http://www.opengis.net/gml": {
				coordinates: c_(Gd.prototype.readFlatCoordinates_)
			}
		}, Gd.prototype.FLAT_LINEAR_RINGS_PARSERS = {
			"http://www.opengis.net/gml": {
				innerBoundaryIs: Gd.prototype.innerBoundaryIsParser_,
				outerBoundaryIs: Gd.prototype.outerBoundaryIsParser_
			}
		}, Gd.prototype.BOX_PARSERS_ = {
			"http://www.opengis.net/gml": {
				coordinates: p_(Gd.prototype.readFlatCoordinates_)
			}
		}, Gd.prototype.GEOMETRY_PARSERS = {
			"http://www.opengis.net/gml": {
				Point: c_(fv.prototype.readPoint),
				MultiPoint: c_(fv.prototype.readMultiPoint),
				LineString: c_(fv.prototype.readLineString),
				MultiLineString: c_(fv.prototype.readMultiLineString),
				LinearRing: c_(fv.prototype.readLinearRing),
				Polygon: c_(fv.prototype.readPolygon),
				MultiPolygon: c_(fv.prototype.readMultiPolygon),
				Box: c_(Gd.prototype.readBox_)
			}
		}, Gd.prototype.GEOMETRY_SERIALIZERS_ = {
			"http://www.opengis.net/gml": {
				Curve: f_(Gd.prototype.writeCurveOrLineString_),
				MultiCurve: f_(Gd.prototype.writeMultiCurveOrLineString_),
				Point: f_(Gd.prototype.writePoint_),
				MultiPoint: f_(Gd.prototype.writeMultiPoint_),
				LineString: f_(Gd.prototype.writeCurveOrLineString_),
				MultiLineString: f_(Gd.prototype.writeMultiCurveOrLineString_),
				LinearRing: f_(Gd.prototype.writeLinearRing_),
				Polygon: f_(Gd.prototype.writeSurfaceOrPolygon_),
				MultiPolygon: f_(Gd.prototype.writeMultiSurfaceOrPolygon_),
				Surface: f_(Gd.prototype.writeSurfaceOrPolygon_),
				MultiSurface: f_(Gd.prototype.writeMultiSurfaceOrPolygon_),
				Envelope: f_(Gd.prototype.writeEnvelope)
			}
		}, Gd.prototype.LINESTRINGORCURVEMEMBER_SERIALIZERS_ = {
			"http://www.opengis.net/gml": {
				lineStringMember: f_(Gd.prototype.writeLineStringOrCurveMember_),
				curveMember: f_(Gd.prototype.writeLineStringOrCurveMember_)
			}
		}, Gd.prototype.RING_SERIALIZERS_ = {
			"http://www.opengis.net/gml": {
				outerBoundaryIs: f_(Gd.prototype.writeRing_),
				innerBoundaryIs: f_(Gd.prototype.writeRing_)
			}
		}, Gd.prototype.POINTMEMBER_SERIALIZERS_ = {
			"http://www.opengis.net/gml": {
				pointMember: f_(Gd.prototype.writePointMember_)
			}
		}, Gd.prototype.SURFACEORPOLYGONMEMBER_SERIALIZERS_ = {
			"http://www.opengis.net/gml": {
				surfaceMember: f_(Gd.prototype.writeSurfaceOrPolygonMember_),
				polygonMember: f_(Gd.prototype.writeSurfaceOrPolygonMember_)
			}
		}, Gd.prototype.ENVELOPE_SERIALIZERS_ = {
			"http://www.opengis.net/gml": {
				lowerCorner: f_(Iv),
				upperCorner: f_(Iv)
			}
		};
		var Nv, Gv = Gd,
			Fp = ((Nv = Mv) && (Dv.__proto__ = Nv), (Dv.prototype = Object.create(Nv && Nv.prototype))
				.constructor = Dv);

		function Dv(t) {
			t = t || {};
			Nv.call(this, t), this.schemaLocation = t.schemaLocation || this.namespace +
				" http://schemas.opengis.net/gml/3.2.1/gml.xsd"
		}
		Fp.prototype.namespace = "http://www.opengis.net/gml/3.2", Fp.prototype
			.GEOMETRY_FLAT_COORDINATES_PARSERS = {
				"http://www.opengis.net/gml/3.2": {
					pos: c_(Mv.prototype.readFlatPos_),
					posList: c_(Mv.prototype.readFlatPosList_)
				}
			}, Fp.prototype.FLAT_LINEAR_RINGS_PARSERS = {
				"http://www.opengis.net/gml/3.2": {
					interior: Mv.prototype.interiorParser_,
					exterior: Mv.prototype.exteriorParser_
				}
			}, Fp.prototype.GEOMETRY_PARSERS = {
				"http://www.opengis.net/gml/3.2": {
					Point: c_(fv.prototype.readPoint),
					MultiPoint: c_(fv.prototype.readMultiPoint),
					LineString: c_(fv.prototype.readLineString),
					MultiLineString: c_(fv.prototype.readMultiLineString),
					LinearRing: c_(fv.prototype.readLinearRing),
					Polygon: c_(fv.prototype.readPolygon),
					MultiPolygon: c_(fv.prototype.readMultiPolygon),
					Surface: c_(Fp.prototype.readSurface_),
					MultiSurface: c_(Mv.prototype.readMultiSurface_),
					Curve: c_(Fp.prototype.readCurve_),
					MultiCurve: c_(Mv.prototype.readMultiCurve_),
					Envelope: c_(Fp.prototype.readEnvelope_)
				}
			}, Fp.prototype.MULTICURVE_PARSERS_ = {
				"http://www.opengis.net/gml/3.2": {
					curveMember: p_(Mv.prototype.curveMemberParser_),
					curveMembers: p_(Mv.prototype.curveMemberParser_)
				}
			}, Fp.prototype.MULTISURFACE_PARSERS_ = {
				"http://www.opengis.net/gml/3.2": {
					surfaceMember: p_(Mv.prototype.surfaceMemberParser_),
					surfaceMembers: p_(Mv.prototype.surfaceMemberParser_)
				}
			}, Fp.prototype.CURVEMEMBER_PARSERS_ = {
				"http://www.opengis.net/gml/3.2": {
					LineString: p_(fv.prototype.readLineString),
					Curve: p_(Mv.prototype.readCurve_)
				}
			}, Fp.prototype.SURFACEMEMBER_PARSERS_ = {
				"http://www.opengis.net/gml/3.2": {
					Polygon: p_(fv.prototype.readPolygon),
					Surface: p_(Mv.prototype.readSurface_)
				}
			}, Fp.prototype.SURFACE_PARSERS_ = {
				"http://www.opengis.net/gml/3.2": {
					patches: c_(Mv.prototype.readPatch_)
				}
			}, Fp.prototype.CURVE_PARSERS_ = {
				"http://www.opengis.net/gml/3.2": {
					segments: c_(Mv.prototype.readSegment_)
				}
			}, Fp.prototype.ENVELOPE_PARSERS_ = {
				"http://www.opengis.net/gml/3.2": {
					lowerCorner: p_(Mv.prototype.readFlatPosList_),
					upperCorner: p_(Mv.prototype.readFlatPosList_)
				}
			}, Fp.prototype.PATCHES_PARSERS_ = {
				"http://www.opengis.net/gml/3.2": {
					PolygonPatch: c_(Mv.prototype.readPolygonPatch_)
				}
			}, Fp.prototype.SEGMENTS_PARSERS_ = {
				"http://www.opengis.net/gml/3.2": {
					LineStringSegment: c_(Mv.prototype.readLineStringSegment_)
				}
			}, Fp.prototype.MULTIPOINT_PARSERS_ = {
				"http://www.opengis.net/gml/3.2": {
					pointMember: p_(fv.prototype.pointMemberParser_),
					pointMembers: p_(fv.prototype.pointMemberParser_)
				}
			}, Fp.prototype.MULTILINESTRING_PARSERS_ = {
				"http://www.opengis.net/gml/3.2": {
					lineStringMember: p_(fv.prototype.lineStringMemberParser_),
					lineStringMembers: p_(fv.prototype.lineStringMemberParser_)
				}
			}, Fp.prototype.MULTIPOLYGON_PARSERS_ = {
				"http://www.opengis.net/gml/3.2": {
					polygonMember: p_(fv.prototype.polygonMemberParser_),
					polygonMembers: p_(fv.prototype.polygonMemberParser_)
				}
			}, Fp.prototype.POINTMEMBER_PARSERS_ = {
				"http://www.opengis.net/gml/3.2": {
					Point: p_(fv.prototype.readFlatCoordinatesFromNode_)
				}
			}, Fp.prototype.LINESTRINGMEMBER_PARSERS_ = {
				"http://www.opengis.net/gml/3.2": {
					LineString: p_(fv.prototype.readLineString)
				}
			}, Fp.prototype.POLYGONMEMBER_PARSERS_ = {
				"http://www.opengis.net/gml/3.2": {
					Polygon: p_(fv.prototype.readPolygon)
				}
			}, Fp.prototype.RING_PARSERS = {
				"http://www.opengis.net/gml/3.2": {
					LinearRing: c_(fv.prototype.readFlatLinearRing_)
				}
			}, Fp.prototype.RING_SERIALIZERS_ = {
				"http://www.opengis.net/gml/3.2": {
					exterior: f_(Mv.prototype.writeRing_),
					interior: f_(Mv.prototype.writeRing_)
				}
			}, Fp.prototype.ENVELOPE_SERIALIZERS_ = {
				"http://www.opengis.net/gml/3.2": {
					lowerCorner: f_(Iv),
					upperCorner: f_(Iv)
				}
			}, Fp.prototype.SURFACEORPOLYGONMEMBER_SERIALIZERS_ = {
				"http://www.opengis.net/gml/3.2": {
					surfaceMember: f_(Mv.prototype.writeSurfaceOrPolygonMember_),
					polygonMember: f_(Mv.prototype.writeSurfaceOrPolygonMember_)
				}
			}, Fp.prototype.POINTMEMBER_SERIALIZERS_ = {
				"http://www.opengis.net/gml/3.2": {
					pointMember: f_(Mv.prototype.writePointMember_)
				}
			}, Fp.prototype.LINESTRINGORCURVEMEMBER_SERIALIZERS_ = {
				"http://www.opengis.net/gml/3.2": {
					lineStringMember: f_(Mv.prototype.writeLineStringOrCurveMember_),
					curveMember: f_(Mv.prototype.writeLineStringOrCurveMember_)
				}
			}, Fp.prototype.GEOMETRY_SERIALIZERS_ = {
				"http://www.opengis.net/gml/3.2": {
					Curve: f_(Mv.prototype.writeCurveOrLineString_),
					MultiCurve: f_(Mv.prototype.writeMultiCurveOrLineString_),
					Point: f_(Fp.prototype.writePoint_),
					MultiPoint: f_(Mv.prototype.writeMultiPoint_),
					LineString: f_(Mv.prototype.writeCurveOrLineString_),
					MultiLineString: f_(Mv.prototype.writeMultiCurveOrLineString_),
					LinearRing: f_(Mv.prototype.writeLinearRing_),
					Polygon: f_(Mv.prototype.writeSurfaceOrPolygon_),
					MultiPolygon: f_(Mv.prototype.writeMultiSurfaceOrPolygon_),
					Surface: f_(Mv.prototype.writeSurfaceOrPolygon_),
					MultiSurface: f_(Mv.prototype.writeMultiSurfaceOrPolygon_),
					Envelope: f_(Mv.prototype.writeEnvelope)
				}
			};
		var kv, Op = Fp,
			jv = [null, "http://www.topografix.com/GPX/1/0", "http://www.topografix.com/GPX/1/1"],
			Uv = {
				rte: _x,
				trk: fx,
				wpt: gx
			},
			Yv = x_(jv, {
				rte: p_(_x),
				trk: p_(fx),
				wpt: p_(gx)
			}),
			Bv = x_(jv, {
				text: __(Cv, "linkText"),
				type: __(Cv, "linkType")
			}),
			zv = x_(jv, {
				rte: f_(function(t, e, i) {
					var r = i[0],
						o = e.getProperties(),
						t = {
							node: t
						};
					t.properties = o;
					e = e.getGeometry();
					e.getType() == Ht.LINE_STRING && (n = Jm(e, !0, r), t.geometryLayout = n
						.getLayout(), o.rtept = n.getCoordinates());
					var n = i[i.length - 1].node,
						n = Qv[n.namespaceURI],
						o = v_(o, n);
					w_(t, $v, m_, o, i, n)
				}),
				trk: f_(function(t, e, i) {
					var r = i[0],
						o = e.getProperties(),
						t = {
							node: t
						};
					t.properties = o;
					e = e.getGeometry();
					e.getType() == Ht.MULTI_LINE_STRING && (n = Jm(e, !0, r), o.trkseg = n
						.getLineStrings());
					var n = i[i.length - 1].node,
						n = ex[n.namespaceURI],
						o = v_(o, n);
					w_(t, ix, m_, o, i, n)
				}),
				wpt: f_(function(t, e, i) {
					var r = i[0],
						o = i[i.length - 1];
					o.properties = e.getProperties();
					e = e.getGeometry();
					e.getType() == Ht.POINT && (r = Jm(e, !0, r), o.geometryLayout = r
						.getLayout(), mx(t, r.getCoordinates(), i))
				})
			}),
			qc = ((kv = ru) && (hx.__proto__ = kv), ((hx.prototype = Object.create(kv && kv.prototype))
				.constructor = hx).prototype.handleReadExtensions_ = function(t) {
				for (var e = 0, i = (t = t || []).length; e < i; ++e) {
					var r, o = t[e];
					this.readExtensions_ && (r = o.get("extensionsNode_") || null, this.readExtensions_(
						o, r)), o.set("extensionsNode_", void 0)
				}
			}, hx.prototype.readFeatureFromNode = function(t, e) {
				if (!ot(jv, t.namespaceURI)) return null;
				var i = Uv[t.localName];
				if (!i) return null;
				e = i(t, [this.getReadOptions(t, e)]);
				return e ? (this.handleReadExtensions_([e]), e) : null
			}, hx.prototype.readFeaturesFromNode = function(t, e) {
				if (!ot(jv, t.namespaceURI)) return [];
				if ("gpx" != t.localName) return [];
				e = S_([], Yv, t, [this.getReadOptions(t, e)]);
				return e ? (this.handleReadExtensions_(e), e) : []
			}, hx.prototype.writeFeaturesNode = function(t, e) {
				e = this.adaptOptions(e);
				var i = s_("http://www.topografix.com/GPX/1/1", "gpx");
				return i.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xsi", n_), i
					.setAttributeNS(n_, "xsi:schemaLocation",
						"http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd"),
					i.setAttribute("version", "1.1"), i.setAttribute("creator", "BDMap1.0"), w_({
						node: i
					}, zv, lx, t, [e]), i
			}, hx),
			Xv = x_(jv, {
				name: __(Cv),
				cmt: __(Cv),
				desc: __(Cv),
				src: __(Cv),
				link: cx,
				number: __(Ev),
				extensions: dx,
				type: __(Cv),
				rtept: function(t, e) {
					var i = S_({}, Vv, t, e);
					i && ux((e = e[e.length - 1]).flatCoordinates, e.layoutOptions, t, i)
				}
			}),
			Vv = x_(jv, {
				ele: __(vv),
				time: __(mv)
			}),
			Wv = x_(jv, {
				name: __(Cv),
				cmt: __(Cv),
				desc: __(Cv),
				src: __(Cv),
				link: cx,
				number: __(Ev),
				type: __(Cv),
				extensions: dx,
				trkseg: function(t, e) {
					var i = e[e.length - 1];
					E_(Kv, t, e);
					e = i.flatCoordinates;
					i.ends.push(e.length)
				}
			}),
			Kv = x_(jv, {
				trkpt: function(t, e) {
					var i = S_({}, Hv, t, e);
					i && ux((e = e[e.length - 1]).flatCoordinates, e.layoutOptions, t, i)
				}
			}),
			Hv = x_(jv, {
				ele: __(vv),
				time: __(mv)
			}),
			Zv = x_(jv, {
				ele: __(vv),
				time: __(mv),
				magvar: __(vv),
				geoidheight: __(vv),
				name: __(Cv),
				cmt: __(Cv),
				desc: __(Cv),
				src: __(Cv),
				link: cx,
				sym: __(Cv),
				type: __(Cv),
				fix: __(Cv),
				sat: __(Ev),
				hdop: __(vv),
				vdop: __(vv),
				pdop: __(vv),
				ageofdgpsdata: __(vv),
				dgpsid: __(Ev),
				extensions: dx
			}),
			qv = ["text", "type"],
			Jv = x_(jv, {
				text: f_(Iv),
				type: f_(Iv)
			}),
			Qv = x_(jv, ["name", "cmt", "desc", "src", "link", "number", "type", "rtept"]),
			$v = x_(jv, {
				name: f_(Iv),
				cmt: f_(Iv),
				desc: f_(Iv),
				src: f_(Iv),
				link: f_(yx),
				number: f_(Rv),
				type: f_(Iv),
				rtept: g_(f_(mx))
			}),
			tx = x_(jv, ["ele", "time"]),
			ex = x_(jv, ["name", "cmt", "desc", "src", "link", "number", "type", "trkseg"]),
			ix = x_(jv, {
				name: f_(Iv),
				cmt: f_(Iv),
				desc: f_(Iv),
				src: f_(Iv),
				link: f_(yx),
				number: f_(Rv),
				type: f_(Iv),
				trkseg: g_(f_(function(t, e, i) {
					t = {
						node: t
					};
					t.geometryLayout = e.getLayout(), t.properties = {}, w_(t, ox, rx, e
						.getCoordinates(), i)
				}))
			}),
			rx = y_("trkpt"),
			ox = x_(jv, {
				trkpt: f_(mx)
			}),
			nx = x_(jv, ["ele", "time", "magvar", "geoidheight", "name", "cmt", "desc", "src", "link",
				"sym", "type", "fix", "sat", "hdop", "vdop", "pdop", "ageofdgpsdata", "dgpsid"
			]),
			sx = x_(jv, {
				ele: f_(Tv),
				time: f_(function(t, e) {
					e = new Date(1e3 * e), e = e.getUTCFullYear() + "-" + Lr(e.getUTCMonth() +
							1, 2) + "-" + Lr(e.getUTCDate(), 2) + "T" + Lr(e.getUTCHours(), 2) +
						":" + Lr(e.getUTCMinutes(), 2) + ":" + Lr(e.getUTCSeconds(), 2) + "Z";
					t.appendChild(o_.createTextNode(e))
				}),
				magvar: f_(Tv),
				geoidheight: f_(Tv),
				name: f_(Iv),
				cmt: f_(Iv),
				desc: f_(Iv),
				src: f_(Iv),
				link: f_(yx),
				sym: f_(Iv),
				type: f_(Iv),
				fix: f_(Iv),
				sat: f_(Rv),
				hdop: f_(Tv),
				vdop: f_(Tv),
				pdop: f_(Tv),
				ageofdgpsdata: f_(Tv),
				dgpsid: f_(Rv)
			}),
			ax = {
				Point: "wpt",
				LineString: "rte",
				MultiLineString: "trk"
			};

		function hx(t) {
			kv.call(this);
			t = t || {};
			this.dataProjection = ke("EPSG:4326"), this.readExtensions_ = t.readExtensions
		}

		function lx(t, e, i) {
			t = t.getGeometry();
			if (t) {
				t = ax[t.getType()];
				if (t) return s_(e[e.length - 1].node.namespaceURI, t)
			}
		}

		function ux(t, e, i, r) {
			return t.push(parseFloat(i.getAttribute("lon")), parseFloat(i.getAttribute("lat"))), "ele" in
				r ? (t.push(r.ele), delete r.ele, e.hasZ = !0) : t.push(0), "time" in r ? (t.push(r.time),
					delete r.time, e.hasM = !0) : t.push(0), t
		}

		function px(t, e, i) {
			var r = Kt.XY,
				o = 2;
			if (t.hasZ && t.hasM ? (r = Kt.XYZM, o = 4) : t.hasZ ? (r = Kt.XYZ, o = 3) : t.hasM && (r = Kt
					.XYM, o = 3), 4 !== o) {
				for (var n = 0, s = e.length / 4; n < s; n++) e[n * o] = e[4 * n], e[n * o + 1] = e[4 * n +
					1], t.hasZ && (e[n * o + 2] = e[4 * n + 2]), t.hasM && (e[n * o + 2] = e[4 * n + 3]);
				if (e.length = e.length / 4 * o, i)
					for (var a = 0, h = i.length; a < h; a++) i[a] = i[a] / 4 * o
			}
			return r
		}

		function cx(t, e) {
			var i = e[e.length - 1],
				r = t.getAttribute("href");
			null !== r && (i.link = r), E_(Bv, t, e)
		}

		function dx(t, e) {
			e[e.length - 1].extensionsNode_ = t
		}

		function _x(t, e) {
			var i = e[0],
				r = S_({
					flatCoordinates: [],
					layoutOptions: {}
				}, Xv, t, e);
			if (r) {
				t = r.flatCoordinates;
				delete r.flatCoordinates;
				e = r.layoutOptions;
				delete r.layoutOptions;
				e = px(e, t), e = new Vr(t, e);
				Jm(e, !1, i);
				e = new et(e);
				return e.setProperties(r), e
			}
		}

		function fx(t, e) {
			var i = e[0],
				r = S_({
					flatCoordinates: [],
					ends: [],
					layoutOptions: {}
				}, Wv, t, e);
			if (r) {
				var o = r.flatCoordinates;
				delete r.flatCoordinates;
				t = r.ends;
				delete r.ends;
				e = r.layoutOptions;
				delete r.layoutOptions;
				e = px(e, o, t), t = new qy(o, e, t);
				Jm(t, !1, i);
				t = new et(t);
				return t.setProperties(r), t
			}
		}

		function gx(t, e) {
			var i = e[0],
				r = S_({}, Zv, t, e);
			if (r) {
				e = {}, t = ux([], e, t, r), e = px(e, t), e = new Oi(t, e);
				Jm(e, !1, i);
				e = new et(e);
				return e.setProperties(r), e
			}
		}

		function yx(t, e, i) {
			t.setAttribute("href", e);
			e = i[i.length - 1].properties, e = [e.linkText, e.linkType];
			w_({
				node: t
			}, Jv, m_, e, i, qv)
		}

		function mx(t, e, i) {
			var r = i[i.length - 1],
				o = r.node.namespaceURI,
				n = r.properties;
			switch (t.setAttributeNS(null, "lat", String(e[1])), t.setAttributeNS(null, "lon", String(e[
				0])), r.geometryLayout) {
				case Kt.XYZM:
					0 !== e[3] && (n.time = e[3]);
				case Kt.XYZ:
					0 !== e[2] && (n.ele = e[2]);
					break;
				case Kt.XYM:
					0 !== e[2] && (n.time = e[2])
			}
			r = ("rtept" == t.nodeName ? tx : nx)[o], o = v_(n, r);
			w_({
				node: t,
				properties: n
			}, sx, m_, o, i, r)
		}
		O = qc;

		function vx(t, e) {
			if (!t) return null;
			var i, r;
			switch (t.type) {
				case Ht.POINT:
					i = new Oi(t.coordinates);
					break;
				case Ht.LINE_STRING:
					i = new Vr(t.coordinates);
					break;
				case Ht.POLYGON:
					i = new Zi(t.coordinates);
					break;
				case Ht.MULTI_POINT:
					i = new Jy(t.coordinates);
					break;
				case Ht.MULTI_LINE_STRING:
					i = new qy(t.coordinates);
					break;
				case Ht.MULTI_POLYGON:
					i = new rm(t.coordinates);
					break;
				case Ht.GEOMETRY_COLLECTION:
					r = t.geometries.map(function(t) {
						return vx(t, void 0)
					}), i = new Zm(r);
					break;
				default:
					throw new Error("Unsupported GeoJSON type: " + t.type)
			}
			return Jm(i, !1, e)
		}

		function xx(t, e) {
			var i, r, o, n, s = (t = Jm(t, !0, e)).getType();
			switch (s) {
				case Ht.POINT:
					i = {
						type: "Point",
						coordinates: t.getCoordinates()
					};
					break;
				case Ht.LINE_STRING:
					i = {
						type: "LineString",
						coordinates: t.getCoordinates()
					};
					break;
				case Ht.POLYGON:
					e && (n = e.rightHanded), i = {
						type: "Polygon",
						coordinates: t.getCoordinates(n)
					};
					break;
				case Ht.MULTI_POINT:
					i = {
						type: "MultiPoint",
						coordinates: t.getCoordinates()
					};
					break;
				case Ht.MULTI_LINE_STRING:
					i = {
						type: "MultiLineString",
						coordinates: t.getCoordinates()
					};
					break;
				case Ht.MULTI_POLYGON:
					e && (o = e.rightHanded), i = {
						type: "MultiPolygon",
						coordinates: t.getCoordinates(o)
					};
					break;
				case Ht.GEOMETRY_COLLECTION:
					r = e, i = {
						type: "GeometryCollection",
						geometries: t.getGeometriesArray().map(function(t) {
							var e = y({}, r);
							return delete e.featureProjection, xx(t, e)
						})
					};
					break;
				case Ht.CIRCLE:
					i = {
						type: "GeometryCollection",
						geometries: []
					};
					break;
				default:
					throw new Error("Unsupported geometry type: " + s)
			}
			return i
		}
		var Ex, pf = ((Ex = Mc) && (Sx.__proto__ = Ex), ((Sx.prototype = Object.create(Ex && Ex.prototype))
				.constructor = Sx).prototype.readFeatureFromObject = function(t, e) {
				var i, t = vx((i = "Feature" === t.type ? t : {
						type: "Feature",
						geometry: t,
						properties: null
					}).geometry, e),
					e = new et;
				return this.geometryName_ ? e.setGeometryName(this.geometryName_) : this
					.extractGeometryName_ && "geometry_name" in i !== void 0 && e.setGeometryName(i
						.geometry_name), e.setGeometry(t), "id" in i && e.setId(i.id), i.properties && e
					.setProperties(i.properties), e
			}, Sx.prototype.readFeaturesFromObject = function(t, e) {
				var i = null;
				if ("FeatureCollection" === t.type) {
					i = [];
					for (var r = t.features, o = 0, n = r.length; o < n; ++o) i.push(this
						.readFeatureFromObject(r[o], e))
				} else i = [this.readFeatureFromObject(t, e)];
				return i
			}, Sx.prototype.readGeometryFromObject = vx, Sx.prototype.readProjectionFromObject =
			function(t) {
				var e, t = t.crs;
				return t ? "name" == t.type ? e = ke(t.properties.name) : $(!1, 36) : e = this
					.dataProjection, e
			}, Sx.prototype.writeFeatureObject = function(t, e) {
				e = this.adaptOptions(e);
				var i = {
						type: "Feature",
						geometry: null,
						properties: null
					},
					r = t.getId();
				void 0 !== r && (i.id = r);
				r = t.getGeometry();
				r && (i.geometry = xx(r, e));
				e = t.getProperties();
				return delete e[t.getGeometryName()], dt(e) || (i.properties = e), i
			}, Sx.prototype.writeFeaturesObject = function(t, e) {
				e = this.adaptOptions(e);
				for (var i = [], r = 0, o = t.length; r < o; ++r) i.push(this.writeFeatureObject(t[r],
					e));
				return {
					type: "FeatureCollection",
					features: i
				}
			}, Sx.prototype.writeGeometryObject = function(t, e) {
				return xx(t, this.adaptOptions(e))
			}, Sx);

		function Sx(t) {
			t = t || {};
			Ex.call(this), this.dataProjection = ke(t.dataProjection || "EPSG:4326"), t.featureProjection &&
				(this.defaultFeatureProjection = ke(t.featureProjection)), this.geometryName_ = t
				.geometryName, this.extractGeometryName_ = t.extractGeometryName
		}

		function Cx(t) {
			return "string" == typeof t ? t : ""
		}
		var wx, Tx, Rx, Ix, Lx, bx, Px, Mx, Fx, Uh = ((Fx = cc) && (Jx.__proto__ = Fx), ((Jx.prototype =
				Object.create(Fx && Fx.prototype)).constructor = Jx).prototype.getType = function() {
				return $d.TEXT
			}, Jx.prototype.readFeature = function(t, e) {
				return this.readFeatureFromText(Cx(t), this.adaptOptions(e))
			}, Jx.prototype.readFeatureFromText = function(t, e) {
				return a()
			}, Jx.prototype.readFeatures = function(t, e) {
				return this.readFeaturesFromText(Cx(t), this.adaptOptions(e))
			}, Jx.prototype.readFeaturesFromText = function(t, e) {
				return a()
			}, Jx.prototype.readGeometry = function(t, e) {
				return this.readGeometryFromText(Cx(t), this.adaptOptions(e))
			}, Jx.prototype.readGeometryFromText = function(t, e) {
				return a()
			}, Jx.prototype.readProjection = function(t) {
				return this.readProjectionFromText(Cx(t))
			}, Jx.prototype.readProjectionFromText = function(t) {
				return this.dataProjection
			}, Jx.prototype.writeFeature = function(t, e) {
				return this.writeFeatureText(t, this.adaptOptions(e))
			}, Jx.prototype.writeFeatureText = function(t, e) {
				return a()
			}, Jx.prototype.writeFeatures = function(t, e) {
				return this.writeFeaturesText(t, this.adaptOptions(e))
			}, Jx.prototype.writeFeaturesText = function(t, e) {
				return a()
			}, Jx.prototype.writeGeometry = function(t, e) {
				return this.writeGeometryText(t, this.adaptOptions(e))
			}, Jx.prototype.writeGeometryText = function(t, e) {
				return a()
			}, Jx),
			Ox = "barometric",
			Ax = "gps",
			Nx = "none",
			Gx = /^B(\d{2})(\d{2})(\d{2})(\d{2})(\d{5})([NS])(\d{3})(\d{5})([EW])([AV])(\d{5})(\d{5})/,
			Dx = /^H.([A-Z]{3}).*?:(.*)/,
			kx = /^HFDTE(\d{2})(\d{2})(\d{2})/,
			jx = /\r\n|\r|\n/,
			Sn = ((Mx = Uh) && (qx.__proto__ = Mx), ((qx.prototype = Object.create(Mx && Mx.prototype))
				.constructor = qx).prototype.readFeatureFromText = function(t, e) {
				for (var i = this.altitudeMode_, r = t.split(jx), o = {}, n = [], s = 2e3, a = 0, h = 1,
						l = -1, u = 0, p = r.length; u < p; ++u) {
					var c, d, _, f, g, y, m = r[u],
						v = void 0;
					"B" == m.charAt(0) ? (v = Gx.exec(m)) && (c = parseInt(v[1], 10), d = parseInt(v[2],
								10), _ = parseInt(v[3], 10), f = parseInt(v[4], 10) + parseInt(v[5],
							10) / 6e4, "S" == v[6] && (f = -f), g = parseInt(v[7], 10) + parseInt(v[8],
								10) / 6e4, "W" == v[9] && (g = -g), n.push(g, f), i != Nx && (y =
								void 0, y = i == Ax ? parseInt(v[11], 10) : i == Ox ? parseInt(v[12],
									10) : 0, n.push(y)), (y = Date.UTC(s, a, h, c, d, _)) < l && (y =
								Date.UTC(s, a, h + 1, c, d, _)), n.push(y / 1e3), l = y) : "H" == m
						.charAt(0) && ((v = kx.exec(m)) ? (h = parseInt(v[1], 10), a = parseInt(v[2],
							10) - 1, s = 2e3 + parseInt(v[3], 10)) : (v = Dx.exec(m)) && (o[v[1]] =
							v[2].trim()))
				}
				if (0 === n.length) return null;
				t = i == Nx ? Kt.XYM : Kt.XYZM, t = new Vr(n, t), e = new et(Jm(t, !1, e));
				return e.setProperties(o), e
			}, qx.prototype.readFeaturesFromText = function(t, e) {
				e = this.readFeatureFromText(t, e);
				return e ? [e] : []
			}, qx),
			Ux = ["http://www.google.com/kml/ext/2.2"],
			Yx = [null, "http://earth.google.com/kml/2.0", "http://earth.google.com/kml/2.1",
				"http://earth.google.com/kml/2.2", "http://www.opengis.net/kml/2.2"
			],
			Bx = {
				fraction: D_,
				pixels: k_,
				insetPixels: k_
			},
			zx = x_(Yx, {
				ExtendedData: jE,
				Region: UE,
				MultiGeometry: __(PE, "geometry"),
				LineString: __(IE, "geometry"),
				LinearRing: __(LE, "geometry"),
				Point: __(ME, "geometry"),
				Polygon: __(OE, "geometry"),
				Style: __(NE),
				StyleMap: function(t, e) {
					t = dE(t, e);
					t && (e = e[e.length - 1], Array.isArray(t) ? e.Style = t : "string" ==
						typeof t ? e.styleUrl = t : $(!1, 38))
				},
				address: __(Cv),
				description: __(Cv),
				name: __(Cv),
				open: __(gv),
				phoneNumber: __(Cv),
				styleUrl: __(uE),
				visibility: __(gv)
			}, x_(Ux, {
				MultiTrack: __(function(t, e) {
					e = S_([], xE, t, e);
					if (e) return new qy(e)
				}, "geometry"),
				Track: __(SE, "geometry")
			})),
			Xx = x_(Yx, {
				ExtendedData: jE,
				Region: UE,
				Link: function(t, e) {
					E_(Vx, t, e)
				},
				address: __(Cv),
				description: __(Cv),
				name: __(Cv),
				open: __(gv),
				phoneNumber: __(Cv),
				visibility: __(gv)
			}),
			Vx = x_(Yx, {
				href: __(uE)
			}),
			Wx = x_(Yx, {
				LatLonAltBox: function(t, e) {
					var i = S_({}, zE, t, e);
					i && (t = e[e.length - 1], e = [parseFloat(i.west), parseFloat(i.south),
							parseFloat(i.east), parseFloat(i.north)
						], t.extent = e, t.altitudeMode = i.altitudeMode, t.minAltitude =
						parseFloat(i.minAltitude), t.maxAltitude = parseFloat(i.maxAltitude))
				},
				Lod: function(t, e) {
					t = S_({}, XE, t, e);
					t && ((e = e[e.length - 1]).minLodPixels = parseFloat(t.minLodPixels), e
						.maxLodPixels = parseFloat(t.maxLodPixels), e.minFadeExtent =
						parseFloat(t.minFadeExtent), e.maxFadeExtent = parseFloat(t
							.maxFadeExtent))
				}
			}),
			Kx = x_(Yx, ["Document", "Placemark"]),
			Hx = x_(Yx, {
				Document: f_(function(t, e, i) {
					w_({
						node: t
					}, ZE, qE, e, i, void 0, this)
				}),
				Placemark: f_(xS)
			}),
			Zx = null;

		function qx(t) {
			Mx.call(this);
			t = t || {};
			this.dataProjection = ke("EPSG:4326"), this.altitudeMode_ = t.altitudeMode || Nx
		}

		function Jx() {
			Fx.call(this)
		}
		var Qx, $x, tE, eE = null,
			iE = null,
			rE = null,
			oE = null,
			nE = null,
			jo = ((tE = ru) && (sE.__proto__ = tE), ((sE.prototype = Object.create(tE && tE.prototype))
				.constructor = sE).prototype.readDocumentOrFolder_ = function(t, e) {
				return S_([], x_(Yx, {
					Document: u_(this.readDocumentOrFolder_, this),
					Folder: u_(this.readDocumentOrFolder_, this),
					Placemark: p_(this.readPlacemark_, this),
					Style: this.readSharedStyle_.bind(this),
					StyleMap: this.readSharedStyleMap_.bind(this)
				}), t, e, this) || void 0
			}, sE.prototype.readPlacemark_ = function(t, e) {
				var s, a, h, l, u, i = S_({
					geometry: null
				}, zx, t, e);
				if (i) {
					var r = new et,
						t = t.getAttribute("id");
					null !== t && r.setId(t);
					t = e[0], e = i.geometry;
					return e && Jm(e, !1, t), r.setGeometry(e), delete i.geometry, this
						.extractStyles_ && (s = i.Style, a = i.styleUrl, h = this.defaultStyle_, l =
							this.sharedStyles_, u = this.showPointNames_, e = function(t, e) {
								var i, r, o = u,
									n = "";
								if (!o || (r = t.getGeometry()) && (o = r.getType() === Ht.POINT), o &&
									(n = t.get("name"), o = o && !!n), s) return o ? (i = aE(s[0], n), s
									.concat(i)) : s;
								if (a) {
									t = function s(t, e, i) {
										return Array.isArray(t) ? t : "string" == typeof t ? (!(t in
											i) && "#" + t in i && (t = "#" + t), s(i[t], e,
											i)) : e
									}(a, h, l);
									return o ? (i = aE(t[0], n), t.concat(i)) : t
								}
								return o ? (i = aE(h[0], n), h.concat(i)) : h
							}, r.setStyle(e)), delete i.Style, r.setProperties(i), r
				}
			}, sE.prototype.readSharedStyle_ = function(t, e) {
				var i = t.getAttribute("id");
				null === i || (e = NE(t, e)) && ((t = t.baseURI) && "about:blank" != t || (t = window
						.location.href), i = t ? new URL("#" + i, t).href : "#" + i, this
					.sharedStyles_[i] = e)
			}, sE.prototype.readSharedStyleMap_ = function(t, e) {
				var i = t.getAttribute("id");
				null === i || (e = dE(t, e)) && ((t = t.baseURI) && "about:blank" != t || (t = window
						.location.href), i = t ? new URL("#" + i, t).href : "#" + i, this
					.sharedStyles_[i] = e)
			}, sE.prototype.readFeatureFromNode = function(t, e) {
				return ot(Yx, t.namespaceURI) && this.readPlacemark_(t, [this.getReadOptions(t, e)]) ||
					null
			}, sE.prototype.readFeaturesFromNode = function(t, e) {
				var i;
				if (!ot(Yx, t.namespaceURI)) return [];
				var r = t.localName;
				if ("Document" == r || "Folder" == r) return (i = this.readDocumentOrFolder_(t, [this
					.getReadOptions(t, e)
				])) || [];
				if ("Placemark" == r) {
					var o = this.readPlacemark_(t, [this.getReadOptions(t, e)]);
					return o ? [o] : []
				}
				if ("kml" != r) return [];
				i = [];
				for (var n = t.firstElementChild; n; n = n.nextElementSibling) {
					var s = this.readFeaturesFromNode(n, e);
					s && st(i, s)
				}
				return i
			}, sE.prototype.readName = function(t) {
				if (t) {
					if ("string" != typeof t) return h_(t) ? this.readNameFromDocument(t) : this
						.readNameFromNode(t);
					t = l_(t);
					return this.readNameFromDocument(t)
				}
			}, sE.prototype.readNameFromDocument = function(t) {
				for (var e = t.firstChild; e; e = e.nextSibling)
					if (e.nodeType == Node.ELEMENT_NODE) {
						var i = this.readNameFromNode(e);
						if (i) return i
					}
			}, sE.prototype.readNameFromNode = function(t) {
				for (var e = t.firstElementChild; e; e = e.nextElementSibling)
					if (ot(Yx, e.namespaceURI) && "name" == e.localName) return Cv(e);
				for (var i = t.firstElementChild; i; i = i.nextElementSibling) {
					var r = i.localName;
					if (ot(Yx, i.namespaceURI) && ("Document" == r || "Folder" == r || "Placemark" ==
							r || "kml" == r)) {
						r = this.readNameFromNode(i);
						if (r) return r
					}
				}
			}, sE.prototype.readNetworkLinks = function(t) {
				var e, i = [];
				return "string" == typeof t ? (e = l_(t), st(i, this.readNetworkLinksFromDocument(e))) :
					h_(t) ? st(i, this.readNetworkLinksFromDocument(t)) : st(i, this
						.readNetworkLinksFromNode(t)), i
			}, sE.prototype.readNetworkLinksFromDocument = function(t) {
				for (var e = [], i = t.firstChild; i; i = i.nextSibling) i.nodeType == Node
					.ELEMENT_NODE && st(e, this.readNetworkLinksFromNode(i));
				return e
			}, sE.prototype.readNetworkLinksFromNode = function(t) {
				for (var e, i = [], r = t.firstElementChild; r; r = r.nextElementSibling) ot(Yx, r
					.namespaceURI) && "NetworkLink" == r.localName && (e = S_({}, Xx, r, []), i
					.push(e));
				for (var o = t.firstElementChild; o; o = o.nextElementSibling) {
					var n = o.localName;
					!ot(Yx, o.namespaceURI) || "Document" != n && "Folder" != n && "kml" != n || st(i,
						this.readNetworkLinksFromNode(o))
				}
				return i
			}, sE.prototype.readRegion = function(t) {
				var e, i = [];
				return "string" == typeof t ? (e = l_(t), st(i, this.readRegionFromDocument(e))) : h_(
					t) ? st(i, this.readRegionFromDocument(t)) : st(i, this.readRegionFromNode(t)), i
			}, sE.prototype.readRegionFromDocument = function(t) {
				for (var e = [], i = t.firstChild; i; i = i.nextSibling) i.nodeType == Node
					.ELEMENT_NODE && st(e, this.readRegionFromNode(i));
				return e
			}, sE.prototype.readRegionFromNode = function(t) {
				for (var e, i = [], r = t.firstElementChild; r; r = r.nextElementSibling) ot(Yx, r
					.namespaceURI) && "Region" == r.localName && (e = S_({}, Wx, r, []), i.push(e));
				for (var o = t.firstElementChild; o; o = o.nextElementSibling) {
					var n = o.localName;
					!ot(Yx, o.namespaceURI) || "Document" != n && "Folder" != n && "kml" != n || st(i,
						this.readRegionFromNode(o))
				}
				return i
			}, sE.prototype.writeFeaturesNode = function(t, e) {
				e = this.adaptOptions(e);
				var i = s_(Yx[4], "kml"),
					r = "http://www.w3.org/2000/xmlns/";
				i.setAttributeNS(r, "xmlns:gx", Ux[0]), i.setAttributeNS(r, "xmlns:xsi", n_), i
					.setAttributeNS(n_, "xsi:schemaLocation",
						"http://www.opengis.net/kml/2.2 https://developers.google.com/kml/schema/kml22gx.xsd"
						);
				var o = {
						node: i
					},
					r = {};
				1 < t.length ? r.Document = t : 1 == t.length && (r.Placemark = t[0]);
				t = Kx[i.namespaceURI], r = v_(r, t);
				return w_(o, Hx, m_, r, [e], t, this), i
			}, sE);

		function sE(t) {
			tE.call(this);
			t = t || {};
			nE || (Zx = new ho({
					color: wx = [255, 255, 255, 1]
				}), eE = new H_({
					anchor: Tx = [20, 2],
					anchorOrigin: X_,
					anchorXUnits: Rx = k_,
					anchorYUnits: Ix = k_,
					crossOrigin: "anonymous",
					rotation: 0,
					scale: Px = .5,
					size: Lx = [64, 64],
					src: bx = "https://maps.google.com/mapfiles/kml/pushpin/ylw-pushpin.png"
				}), Qx = "NO_IMAGE", iE = new uo({
					color: wx,
					width: 1
				}), $x = new uo({
					color: [51, 51, 51, 1],
					width: 2
				}), rE = new co({
					font: "bold 16px Helvetica",
					fill: Zx,
					stroke: $x,
					scale: .8
				}), oE = new ef({
					fill: Zx,
					image: eE,
					text: rE,
					stroke: iE,
					zIndex: 0
				}), nE = [oE]), this.dataProjection = ke("EPSG:4326"), this.defaultStyle_ = t
				.defaultStyle || nE, this.extractStyles_ = void 0 === t.extractStyles || t.extractStyles,
				this.writeStyles_ = void 0 === t.writeStyles || t.writeStyles, this.sharedStyles_ = {}, this
				.showPointNames_ = void 0 === t.showPointNames || t.showPointNames
		}

		function aE(t, e) {
			var i, r, o = null,
				n = [0, 0],
				s = "start";
			return t.getImage() && (null === (i = t.getImage().getImageSize()) && (i = Lx), 2 == i.length &&
					(r = t.getImage().getScale(), n[0] = r * i[0] / 2, n[1] = -r * i[1] / 2, s = "left")),
				null !== t.getText() ? ((o = (t = t.getText()).clone()).setFont(t.getFont() || rE
				.getFont()), o.setScale(t.getScale() || rE.getScale()), o.setFill(t.getFill() || rE
					.getFill()), o.setStroke(t.getStroke() || $x)) : o = rE.clone(), o.setText(e), o
				.setOffsetX(n[0]), o.setOffsetY(n[1]), o.setTextAlign(s), new ef({
					text: o
				})
		}

		function hE(t) {
			t = a_(t, !1), t = /^\s*#?\s*([0-9A-Fa-f]{8})\s*$/.exec(t);
			if (t) {
				t = t[1];
				return [parseInt(t.substr(6, 2), 16), parseInt(t.substr(4, 2), 16), parseInt(t.substr(2, 2),
					16), parseInt(t.substr(0, 2), 16) / 255]
			}
		}

		function lE(t) {
			for (var e, i = a_(t, !1), r = [], o =
					/^\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)\s*,\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?)(?:\s*,\s*([+\-]?\d*\.?\d+(?:e[+\-]?\d+)?))?\s*/i; e =
				o.exec(i);) {
				var n = parseFloat(e[1]),
					s = parseFloat(e[2]),
					a = e[3] ? parseFloat(e[3]) : 0;
				r.push(n, s, a), i = i.substr(e[0].length)
			}
			if ("" === i) return r
		}

		function uE(t) {
			var e = a_(t, !1).trim(),
				t = t.baseURI;
			return t && "about:blank" != t || (t = window.location.href), t ? new URL(e, t).href : e
		}

		function pE(t) {
			return vv(t)
		}
		var cE = x_(Yx, {
			Pair: function(t, e) {
				var i = S_({}, YE, t, e);
				!i || (t = i.key) && "normal" == t && ((t = i.styleUrl) && (e[e.length - 1] =
					t), (i = i.Style) && (e[e.length - 1] = i))
			}
		});

		function dE(t, e) {
			return S_(void 0, cE, t, e)
		}
		var _E = x_(Yx, {
				Icon: __(function(t, e) {
					return S_({}, CE, t, e) || null
				}),
				heading: __(vv),
				hotSpot: __(function(t) {
					var e = t.getAttribute("xunits"),
						i = t.getAttribute("yunits"),
						r = "insetPixels" !== e ? "insetPixels" !== i ? X_ : W_ :
						"insetPixels" !== i ? V_ : K_;
					return {
						x: parseFloat(t.getAttribute("x")),
						xunits: Bx[e],
						y: parseFloat(t.getAttribute("y")),
						yunits: Bx[i],
						origin: r
					}
				}),
				scale: __(pE)
			}),
			fE = x_(Yx, {
				color: __(hE),
				scale: __(pE)
			}),
			gE = x_(Yx, {
				color: __(hE),
				width: __(vv)
			}),
			yE = x_(Yx, {
				color: __(hE),
				fill: __(gv),
				outline: __(gv)
			}),
			mE = x_(Yx, {
				coordinates: c_(lE)
			});

		function vE(t, e) {
			return S_(null, mE, t, e)
		}
		var xE = x_(Ux, {
				Track: p_(SE)
			}),
			EE = x_(Yx, {
				when: function(t, e) {
					e = e[e.length - 1].whens, t = a_(t, !1), t = Date.parse(t);
					e.push(isNaN(t) ? 0 : t)
				}
			}, x_(Ux, {
				coord: function(t, e) {
					var i = e[e.length - 1].flatCoordinates,
						r = a_(t, !1),
						e =
						/^\s*([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s+([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s+([+\-]?\d+(?:\.\d*)?(?:e[+\-]?\d*)?)\s*$/i
						.exec(r);
					e ? (t = parseFloat(e[1]), r = parseFloat(e[2]), e = parseFloat(e[3]), i
						.push(t, r, e, 0)) : i.push(0, 0, 0, 0)
				}
			}));

		function SE(t, e) {
			e = S_({
				flatCoordinates: [],
				whens: []
			}, EE, t, e);
			if (e) {
				for (var i = e.flatCoordinates, r = e.whens, o = 0, n = Math.min(i.length, r.length); o <
					n; ++o) i[4 * o + 3] = r[o];
				return new Vr(i, Kt.XYZM)
			}
		}
		var CE = x_(Yx, {
				href: __(uE)
			}, x_(Ux, {
				x: __(vv),
				y: __(vv),
				w: __(vv),
				h: __(vv)
			})),
			wE = x_(Yx, {
				coordinates: c_(lE)
			});

		function TE(t, e) {
			return S_(null, wE, t, e)
		}
		var RE = x_(Yx, {
			extrude: __(gv),
			tessellate: __(gv),
			altitudeMode: __(Cv)
		});

		function IE(t, e) {
			var i = S_({}, RE, t, e),
				e = TE(t, e);
			if (e) {
				e = new Vr(e, Kt.XYZ);
				return e.setProperties(i), e
			}
		}

		function LE(t, e) {
			var i = S_({}, RE, t, e),
				e = TE(t, e);
			if (e) {
				e = new Zi(e, Kt.XYZ, [e.length]);
				return e.setProperties(i), e
			}
		}
		var bE = x_(Yx, {
			LineString: p_(IE),
			LinearRing: p_(LE),
			MultiGeometry: p_(PE),
			Point: p_(ME),
			Polygon: p_(OE)
		});

		function PE(t, e) {
			var i = S_([], bE, t, e);
			if (!i) return null;
			if (0 === i.length) return new Zm(i);
			for (var r = !0, o = i[0].getType(), n = 1, s = i.length; n < s; ++n)
				if (i[n].getType() != o) {
					r = !1;
					break
				} if (r)
				if (o == Ht.POINT) {
					for (var e = i[0], a = e.getLayout(), h = e.getFlatCoordinates(), l = 1, u = i
						.length; l < u; ++l) st(h, i[l].getFlatCoordinates());
					GE(a = new Jy(h, a), i)
				} else o == Ht.LINE_STRING ? GE(a = new qy(i), i) : o == Ht.POLYGON ? GE(a = new rm(i), i) :
					o == Ht.GEOMETRY_COLLECTION ? a = new Zm(i) : $(!1, 37);
			else a = new Zm(i);
			return a
		}

		function ME(t, e) {
			var i = S_({}, RE, t, e),
				e = TE(t, e);
			if (e) {
				e = new Oi(e, Kt.XYZ);
				return e.setProperties(i), e
			}
		}
		var FE = x_(Yx, {
			innerBoundaryIs: function(t, e) {
				t = S_(void 0, VE, t, e);
				t && e[e.length - 1].push(t)
			},
			outerBoundaryIs: function(t, e) {
				t = S_(void 0, WE, t, e);
				t && (e[e.length - 1][0] = t)
			}
		});

		function OE(t, e) {
			var i = S_({}, RE, t, e),
				r = S_([null], FE, t, e);
			if (r && r[0]) {
				for (var o = r[0], n = [o.length], s = 1, a = r.length; s < a; ++s) st(o, r[s]), n.push(o
					.length);
				e = new Zi(o, Kt.XYZ, n);
				return e.setProperties(i), e
			}
		}
		var AE = x_(Yx, {
			IconStyle: function(t, e) {
				var i, r, o, n, s, a, h, l, u, p, c, d = S_({}, _E, t, e);
				d && (n = e[e.length - 1], p = "Icon" in d ? d.Icon : {}, s = !("Icon" in d) ||
					0 < Object.keys(p).length, (l = p.href) ? c = l : s && (c = bx), t = X_,
					(e = d.hotSpot) ? (i = [e.x, e.y], r = e.xunits, o = e.yunits, t = e
						.origin) : c === bx ? (i = Tx, r = Rx, o = Ix) :
					/^http:\/\/maps\.(?:google|gstatic)\.com\//.test(c) && (i = [.5, 0], o =
						r = D_), l = p.x, e = p.y, void 0 !== l && void 0 !== e && (a = [l,
						e
					]), e = p.w, p = p.h, void 0 !== e && void 0 !== p && (h = [e, p]),
					void 0 !== (p = d.heading) && (u = ie(p)), d = d.scale, s ? (c == bx &&
						(h = Lx, void 0 === d && (d = Px)), c = new H_({
							anchor: i,
							anchorOrigin: t,
							anchorXUnits: r,
							anchorYUnits: o,
							crossOrigin: "anonymous",
							offset: a,
							offsetOrigin: X_,
							rotation: u,
							scale: d,
							size: h,
							src: c
						}), n.imageStyle = c) : n.imageStyle = Qx)
			},
			LabelStyle: function(t, e) {
				t = S_({}, fE, t, e);
				t && (e = e[e.length - 1], t = new co({
					fill: new ho({
						color: "color" in t ? t.color : wx
					}),
					scale: t.scale
				}), e.textStyle = t)
			},
			LineStyle: function(t, e) {
				t = S_({}, gE, t, e);
				t && (e = e[e.length - 1], t = new uo({
					color: "color" in t ? t.color : wx,
					width: "width" in t ? t.width : 1
				}), e.strokeStyle = t)
			},
			PolyStyle: function(t, e) {
				var i = S_({}, yE, t, e);
				i && (t = e[e.length - 1], e = new ho({
						color: "color" in i ? i.color : wx
					}), t.fillStyle = e, void 0 !== (e = i.fill) && (t.fill = e), void 0 !==
					(i = i.outline) && (t.outline = i))
			}
		});

		function NE(t, e) {
			var i = S_({}, AE, t, e);
			if (!i) return null;
			var r, o = "fillStyle" in i ? i.fillStyle : Zx,
				t = i.fill;
			void 0 === t || t || (o = null), "imageStyle" in i ? i.imageStyle != Qx && (r = i.imageStyle) :
				r = eE;
			e = "textStyle" in i ? i.textStyle : rE, t = "strokeStyle" in i ? i.strokeStyle : iE, i = i
				.outline;
			return void 0 === i || i || (t = null), [new ef({
				fill: o,
				image: r,
				stroke: t,
				text: e,
				zIndex: void 0
			})]
		}

		function GE(t, e) {
			for (var i, r, o = e.length, n = new Array(e.length), s = new Array(e.length), a = new Array(e
					.length), h = i = r = !1, l = 0; l < o; ++l) {
				var u = e[l];
				n[l] = u.get("extrude"), s[l] = u.get("tessellate"), a[l] = u.get("altitudeMode"), h = h ||
					void 0 !== n[l], i = i || void 0 !== s[l], r = r || a[l]
			}
			h && t.set("extrude", n), i && t.set("tessellate", s), r && t.set("altitudeMode", a)
		}
		var DE = x_(Yx, {
				displayName: __(Cv),
				value: __(Cv)
			}),
			kE = x_(Yx, {
				Data: function(t, e) {
					var i = t.getAttribute("name");
					E_(DE, t, e);
					e = e[e.length - 1];
					null !== i ? e[i] = e.value : null !== e.displayName && (e[e.displayName] = e
						.value), delete e.value
				},
				SchemaData: function(t, e) {
					E_(BE, t, e)
				}
			});

		function jE(t, e) {
			E_(kE, t, e)
		}

		function UE(t, e) {
			E_(Wx, t, e)
		}
		var YE = x_(Yx, {
				Style: __(NE),
				key: __(Cv),
				styleUrl: __(uE)
			}),
			BE = x_(Yx, {
				SimpleData: function(t, e) {
					var i = t.getAttribute("name");
					null !== i && (t = Cv(t), e[e.length - 1][i] = t)
				}
			}),
			zE = x_(Yx, {
				altitudeMode: __(Cv),
				minAltitude: __(vv),
				maxAltitude: __(vv),
				north: __(vv),
				south: __(vv),
				east: __(vv),
				west: __(vv)
			}),
			XE = x_(Yx, {
				minLodPixels: __(vv),
				maxLodPixels: __(vv),
				minFadeExtent: __(vv),
				maxFadeExtent: __(vv)
			}),
			VE = x_(Yx, {
				LinearRing: c_(vE)
			}),
			WE = x_(Yx, {
				LinearRing: c_(vE)
			});

		function KE(t, e) {
			for (var e = oo(e), i = [255 * (4 == e.length ? e[3] : 1), e[2], e[1], e[0]], r = 0; r < 4; ++
				r) {
				var o = Math.floor(i[r]).toString(16);
				i[r] = 1 == o.length ? "0" + o : o
			}
			Iv(t, i.join(""))
		}
		var HE = x_(Yx, {
				Data: f_(function(t, e, i) {
					t.setAttribute("name", e.name);
					t = {
						node: t
					}, e = e.value;
					"object" == typeof e ? (null !== e && e.displayName && w_(t, HE, m_, [e
						.displayName
					], i, ["displayName"]), null !== e && e.value && w_(t, HE, m_, [e
						.value
					], i, ["value"])) : w_(t, HE, m_, [e], i, ["value"])
				}),
				value: f_(function(t, e) {
					Iv(t, e)
				}),
				displayName: f_(function(t, e) {
					t.appendChild(o_.createCDATASection(e))
				})
			}),
			ZE = x_(Yx, {
				Placemark: f_(xS)
			}),
			qE = function(t, e, i) {
				return s_(e[e.length - 1].node.namespaceURI, "Placemark")
			},
			JE = y_("Data"),
			QE = x_(Yx, ["href"], x_(Ux, ["x", "y", "w", "h"])),
			$E = x_(Yx, {
				href: f_(Iv)
			}, x_(Ux, {
				x: f_(Tv),
				y: f_(Tv),
				w: f_(Tv),
				h: f_(Tv)
			})),
			tS = function(t, e, i) {
				return s_(Ux[0], "gx:" + i)
			},
			eS = x_(Yx, ["scale", "heading", "Icon", "hotSpot"]),
			iS = x_(Yx, {
				Icon: f_(function(t, e, i) {
					var r = {
							node: t
						},
						o = i[i.length - 1].node,
						t = QE[o.namespaceURI],
						o = v_(e, t);
					w_(r, $E, m_, o, i, t), o = v_(e, t = QE[Ux[0]]), w_(r, $E, tS, o, i, t)
				}),
				heading: f_(Tv),
				hotSpot: f_(function(t, e) {
					t.setAttribute("x", String(e.x)), t.setAttribute("y", String(e.y)), t
						.setAttribute("xunits", e.xunits), t.setAttribute("yunits", e.yunits)
				}),
				scale: f_(PS)
			}),
			rS = x_(Yx, ["color", "scale"]),
			oS = x_(Yx, {
				color: f_(KE),
				scale: f_(PS)
			}),
			nS = x_(Yx, ["color", "width"]),
			sS = x_(Yx, {
				color: f_(KE),
				width: f_(Tv)
			}),
			aS = {
				Point: "Point",
				LineString: "LineString",
				LinearRing: "LinearRing",
				Polygon: "Polygon",
				MultiPoint: "MultiGeometry",
				MultiLineString: "MultiGeometry",
				MultiPolygon: "MultiGeometry",
				GeometryCollection: "MultiGeometry"
			},
			hS = function(t, e, i) {
				if (t) return s_(e[e.length - 1].node.namespaceURI, aS[t.getType()])
			},
			lS = y_("Point"),
			uS = y_("LineString"),
			pS = y_("LinearRing"),
			cS = y_("Polygon"),
			dS = x_(Yx, {
				LineString: f_(CS),
				Point: f_(CS),
				Polygon: f_(IS),
				GeometryCollection: f_(_S)
			});

		function _S(t, e, i) {
			var r, o, n = {
					node: t
				},
				t = e.getType();
			t == Ht.GEOMETRY_COLLECTION ? (r = e.getGeometries(), o = hS) : t == Ht.MULTI_POINT ? (r = e
					.getPoints(), o = lS) : t == Ht.MULTI_LINE_STRING ? (r = e.getLineStrings(), o = uS) :
				t == Ht.MULTI_POLYGON ? (r = e.getPolygons(), o = cS) : $(!1, 39), w_(n, dS, o, r, i)
		}
		var fS = x_(Yx, {
			LinearRing: f_(CS)
		});

		function gS(t, e, i) {
			w_({
				node: t
			}, fS, pS, [e], i)
		}
		var yS = x_(Yx, {
				ExtendedData: f_(function(t, e, i) {
					for (var r = {
							node: t
						}, o = e.names, n = e.values, s = o.length, a = 0; a < s; a++) w_(r, HE,
						JE, [{
							name: o[a],
							value: n[a]
						}], i)
				}),
				MultiGeometry: f_(_S),
				LineString: f_(CS),
				LinearRing: f_(CS),
				Point: f_(CS),
				Polygon: f_(IS),
				Style: f_(function(t, e, i) {
					var r = {
							node: t
						},
						o = {},
						n = e.getFill(),
						s = e.getStroke(),
						t = e.getImage(),
						e = e.getText();
					t && "function" == typeof t.getSrc && (o.IconStyle = t), e && (o
						.LabelStyle = e), s && (o.LineStyle = s), n && (o.PolyStyle = n);
					n = i[i.length - 1].node, n = MS[n.namespaceURI], o = v_(o, n);
					w_(r, FS, m_, o, i, n)
				}),
				address: f_(Iv),
				description: f_(Iv),
				name: f_(Iv),
				open: f_(wv),
				phoneNumber: f_(Iv),
				styleUrl: f_(Iv),
				visibility: f_(wv)
			}),
			mS = x_(Yx, ["name", "open", "visibility", "address", "phoneNumber", "description", "styleUrl",
				"Style"
			]),
			vS = y_("ExtendedData");

		function xS(t, e, i) {
			var r = {
				node: t
			};
			e.getId() && t.setAttribute("id", e.getId());
			var o = e.getProperties(),
				n = {
					address: 1,
					description: 1,
					name: 1,
					open: 1,
					phoneNumber: 1,
					styleUrl: 1,
					visibility: 1
				};
			n[e.getGeometryName()] = 1;
			t = Object.keys(o || {}).sort().filter(function(t) {
				return !n[t]
			});
			0 < t.length && (s = v_(o, t), w_(r, yS, vS, [{
				names: t,
				values: s
			}], i));
			var s = e.getStyleFunction();
			!s || (s = s(e, 0)) && (a = Array.isArray(s) ? s[0] : s, this.writeStyles_ && (o.Style = a), (
				a = a.getText()) && (o.name = a.getText()));
			var a = i[i.length - 1].node,
				a = mS[a.namespaceURI],
				o = v_(o, a);
			w_(r, yS, m_, o, i, a);
			a = i[0], e = (e = e.getGeometry()) && Jm(e, !0, a);
			w_(r, yS, hS, [e], i)
		}
		var ES = x_(Yx, ["extrude", "tessellate", "altitudeMode", "coordinates"]),
			SS = x_(Yx, {
				extrude: f_(wv),
				tessellate: f_(wv),
				altitudeMode: f_(Iv),
				coordinates: f_(function(t, e, i) {
					var r, o = i[i.length - 1],
						i = o.layout,
						n = o.stride;
					i == Kt.XY || i == Kt.XYM ? r = 2 : i == Kt.XYZ || i == Kt.XYZM ? r = 3 : $(
						!1, 34);
					var s = e.length,
						a = "";
					if (0 < s) {
						a += e[0];
						for (var h = 1; h < r; ++h) a += "," + e[h];
						for (var l = n; l < s; l += n) {
							a += " " + e[l];
							for (var u = 1; u < r; ++u) a += "," + e[l + u]
						}
					}
					Iv(t, a)
				})
			});

		function CS(t, e, i) {
			var r = e.getFlatCoordinates(),
				t = {
					node: t
				};
			t.layout = e.getLayout(), t.stride = e.getStride();
			e = e.getProperties();
			e.coordinates = r;
			r = i[i.length - 1].node, r = ES[r.namespaceURI], e = v_(e, r);
			w_(t, SS, m_, e, i, r)
		}
		var wS = x_(Yx, {
				outerBoundaryIs: f_(gS),
				innerBoundaryIs: f_(gS)
			}),
			TS = y_("innerBoundaryIs"),
			RS = y_("outerBoundaryIs");

		function IS(t, e, i) {
			var r = e.getLinearRings(),
				e = r.shift(),
				t = {
					node: t
				};
			w_(t, wS, TS, r, i), w_(t, wS, RS, [e], i)
		}
		var LS = x_(Yx, {
				color: f_(KE)
			}),
			bS = y_("color");

		function PS(t, e) {
			Tv(t, Math.round(1e6 * e) / 1e6)
		}
		var MS = x_(Yx, ["IconStyle", "LabelStyle", "LineStyle", "PolyStyle"]),
			FS = x_(Yx, {
				IconStyle: f_(function(t, e, i) {
					var r = {
							node: t
						},
						o = {},
						n = e.getSrc(),
						s = e.getSize(),
						a = e.getImageSize(),
						h = {
							href: n
						};
					s && (h.w = s[0], h.h = s[1], t = e.getAnchor(), (n = e.getOrigin()) && a &&
						0 !== n[0] && n[1] !== s[1] && (h.x = n[0], h.y = a[1] - (n[1] + s[
							1])), !t || t[0] === s[0] / 2 && t[1] === s[1] / 2 || (t = {
							x: t[0],
							xunits: k_,
							y: s[1] - t[1],
							yunits: k_
						}, o.hotSpot = t)), o.Icon = h;
					h = e.getScale();
					1 !== h && (o.scale = h);
					e = e.getRotation();
					0 !== e && (o.heading = e);
					e = i[i.length - 1].node, e = eS[e.namespaceURI], o = v_(o, e);
					w_(r, iS, m_, o, i, e)
				}),
				LabelStyle: f_(function(t, e, i) {
					var r = {
							node: t
						},
						o = {},
						t = e.getFill();
					t && (o.color = t.getColor());
					e = e.getScale();
					e && 1 !== e && (o.scale = e);
					e = i[i.length - 1].node, e = rS[e.namespaceURI], o = v_(o, e);
					w_(r, oS, m_, o, i, e)
				}),
				LineStyle: f_(function(t, e, i) {
					var r = {
							node: t
						},
						t = {
							color: e.getColor(),
							width: e.getWidth()
						},
						e = i[i.length - 1].node,
						e = nS[e.namespaceURI],
						t = v_(t, e);
					w_(r, sS, m_, t, i, e)
				}),
				PolyStyle: f_(function(t, e, i) {
					w_({
						node: t
					}, LS, bS, [e.getColor()], i)
				})
			}),
			ad = jo,
			gf = e(1),
			OS = e.n(gf),
			AS = [1, 0, 0, 1, 0, 0],
			$s = function(t, e, i, r, o) {
				this.extent_, this.id_ = o, this.type_ = t, this.flatCoordinates_ = e, this
					.flatInteriorPoints_ = null, this.flatMidpoints_ = null, this.ends_ = i, this
					.properties_ = r
			};
		$s.prototype.get = function(t) {
			return this.properties_[t]
		}, $s.prototype.getExtent = function() {
			return this.extent_ || (this.extent_ = this.type_ === Ht.POINT ? Rt(this.flatCoordinates_) :
				It(this.flatCoordinates_, 0, this.flatCoordinates_.length, 2)), this.extent_
		}, $s.prototype.getFlatInteriorPoint = function() {
			var t;
			return this.flatInteriorPoints_ || (t = Gt(this.getExtent()), this.flatInteriorPoints_ = ki(
				this.flatCoordinates_, 0, this.ends_, 2, t, 0)), this.flatInteriorPoints_
		}, $s.prototype.getFlatInteriorPoints = function() {
			var t;
			return this.flatInteriorPoints_ || (t = tm(this.flatCoordinates_, 0, this.ends_, 2), this
					.flatInteriorPoints_ = ji(this.flatCoordinates_, 0, this.ends_, 2, t)), this
				.flatInteriorPoints_
		}, $s.prototype.getFlatMidpoint = function() {
			return this.flatMidpoints_ || (this.flatMidpoints_ = Yr(this.flatCoordinates_, 0, this
				.flatCoordinates_.length, 2, .5)), this.flatMidpoints_
		}, $s.prototype.getFlatMidpoints = function() {
			if (!this.flatMidpoints_) {
				this.flatMidpoints_ = [];
				for (var t = this.flatCoordinates_, e = 0, i = this.ends_, r = 0, o = i.length; r <
					o; ++r) {
					var n = i[r],
						s = Yr(t, e, n, 2, .5);
					st(this.flatMidpoints_, s), e = n
				}
			}
			return this.flatMidpoints_
		}, $s.prototype.getId = function() {
			return this.id_
		}, $s.prototype.getOrientedFlatCoordinates = function() {
			return this.flatCoordinates_
		}, $s.prototype.getGeometry = function() {
			return this
		}, $s.prototype.getSimplifiedGeometry = function(t) {
			return this
		}, $s.prototype.getProperties = function() {
			return this.properties_
		}, $s.prototype.getStride = function() {
			return 2
		}, $s.prototype.getStyleFunction = function() {}, $s.prototype.getType = function() {
			return this.type_
		}, $s.prototype.transform = function(t, e) {
			var i = (t = ke(t)).getExtent(),
				t = t.getWorldExtent(),
				i = kt(t) / kt(i);
			oi(AS, t[0], t[3], i, -i, 0, 0, 0), Zt(this.flatCoordinates_, 0, this.flatCoordinates_
				.length, 2, AS, this.flatCoordinates_)
		}, $s.prototype.getEnds = $s.prototype.getEndss = function() {
			return this.ends_
		}, $s.prototype.getFlatCoordinates = $s.prototype.getOrientedFlatCoordinates;
		var NS = $s;

		function GS(t, e, i) {
			var r;
			3 === t && (r = {
					keys: [],
					values: [],
					features: []
				}, t = i.readVarint() + i.pos, i.readFields(DS, r, t), r.length = r.features.length, r
				.length && (e[r.name] = r))
		}

		function DS(t, e, i) {
			if (15 === t) e.version = i.readVarint();
			else if (1 === t) e.name = i.readString();
			else if (5 === t) e.extent = i.readVarint();
			else if (2 === t) e.features.push(i.pos);
			else if (3 === t) e.keys.push(i.readString());
			else if (4 === t) {
				for (var r = null, o = i.readVarint() + i.pos; i.pos < o;) r = 1 == (t = i.readVarint() >>
						3) ? i.readString() : 2 === t ? i.readFloat() : 3 === t ? i.readDouble() : 4 === t ?
					i.readVarint64() : 5 === t ? i.readVarint() : 6 === t ? i.readSVarint() : 7 === t ? i
					.readBoolean() : null;
				e.values.push(r)
			}
		}

		function kS(t, e, i) {
			if (1 == t) e.id = i.readVarint();
			else if (2 == t)
				for (var r = i.readVarint() + i.pos; i.pos < r;) {
					var o = e.layer.keys[i.readVarint()],
						n = e.layer.values[i.readVarint()];
					e.properties[o] = n
				} else 3 == t ? e.type = i.readVarint() : 4 == t && (e.geometry = i.pos)
		}
		var jS, US, vu = ((US = cc) && (VS.__proto__ = US), ((VS.prototype = Object.create(US && US
				.prototype)).constructor = VS).prototype.readRawGeometry_ = function(t, e, i, r) {
				t.pos = e.geometry;
				for (var o, n = t.readVarint() + t.pos, s = 1, a = 0, h = 0, l = 0, u = 0, p = 0; t
					.pos < n;) a || (s = 7 & (o = t.readVarint()), a = o >> 3), a--, 1 === s || 2 ===
					s ? (h += t.readSVarint(), l += t.readSVarint(), 1 === s && p < u && (r.push(u), p =
						u), i.push(h, l), u += 2) : 7 === s ? p < u && (i.push(i[p], i[p + 1]), u +=
					2) : $(!1, 59);
				p < u && (r.push(u), p = u)
			}, VS.prototype.createFeature_ = function(t, e, i) {
				var r, o = e.type;
				if (0 === o) return null;
				var n = e.id,
					s = e.properties;
				s[this.layerName_] = e.layer.name;
				var a = [],
					h = [];
				this.readRawGeometry_(t, e, a, h);
				var l, u, l = (e = h.length, 1 === o ? l = 1 === e ? Ht.POINT : Ht.MULTI_POINT : 2 ===
					o ? l = 1 === e ? Ht.LINE_STRING : Ht.MULTI_LINE_STRING : 3 === o && (l = Ht
						.POLYGON), l);
				if (this.featureClass_ === NS) r = new this.featureClass_(l, a, h, s, n);
				else {
					if (l == Ht.POLYGON) {
						for (var p = [], c = 0, d = 0, _ = 0, f = h.length; _ < f; ++_) {
							var g = h[_];
							zi(a, c, g, 2) || (p.push(h.slice(d, _)), d = _), c = g
						}
						u = 1 < p.length ? new rm(a, Kt.XY, p) : new Zi(a, Kt.XY, h)
					} else u = l === Ht.POINT ? new Oi(a, Kt.XY) : l === Ht.LINE_STRING ? new Vr(a, Kt
							.XY) : l === Ht.POLYGON ? new Zi(a, Kt.XY, h) : l === Ht.MULTI_POINT ?
						new Jy(a, Kt.XY) : l === Ht.MULTI_LINE_STRING ? new qy(a, Kt.XY, h) : null;
					r = new this.featureClass_, this.geometryName_ && r.setGeometryName(this
						.geometryName_);
					i = Jm(u, !1, this.adaptOptions(i));
					r.setGeometry(i), r.setId(n), r.setProperties(s)
				}
				return r
			}, VS.prototype.getLastExtent = function() {
				return this.extent_
			}, VS.prototype.getType = function() {
				return $d.ARRAY_BUFFER
			}, VS.prototype.readFeatures = function(t, e) {
				var i, r, o, n = this.layers_,
					s = new OS.a(t),
					a = s.readFields(GS, {}),
					h = [];
				for (i in a)
					if (!n || -1 != n.indexOf(i)) {
						for (var l = a[i], u = 0, p = l.length; u < p; ++u) {
							var c = (c = l, o = u, (r = s).pos = c.features[o], o = r.readVarint() + r
								.pos, c = {
									layer: c,
									type: 0,
									properties: {}
								}, r.readFields(kS, c, o), c);
							h.push(this.createFeature_(s, c))
						}
						this.extent_ = l ? [0, 0, l.extent, l.extent] : null
					} return h
			}, VS.prototype.readProjection = function(t) {
				return this.dataProjection
			}, VS.prototype.setLayers = function(t) {
				this.layers_ = t
			}, VS),
			Dl = [null],
			YS = x_(Dl, {
				nd: function(t, e) {
					e[e.length - 1].ndrefs.push(t.getAttribute("ref"))
				},
				tag: WS
			}),
			BS = x_(Dl, {
				node: function(t, e) {
					var i = e[0],
						r = e[e.length - 1],
						o = t.getAttribute("id"),
						n = [parseFloat(t.getAttribute("lon")), parseFloat(t.getAttribute("lat"))];
					r.nodes[o] = n;
					e = S_({
						tags: {}
					}, zS, t, e);
					dt(e.tags) || (Jm(n = new Oi(n), !1, i), (n = new et(n)).setId(o), n
						.setProperties(e.tags), r.features.push(n))
				},
				way: function(t, e) {
					t = S_({
						id: t.getAttribute("id"),
						ndrefs: [],
						tags: {}
					}, YS, t, e);
					e[e.length - 1].ways.push(t)
				}
			}),
			T = ((jS = ru) && (XS.__proto__ = jS), ((XS.prototype = Object.create(jS && jS.prototype))
				.constructor = XS).prototype.readFeaturesFromNode = function(t, e) {
				var i = this.getReadOptions(t, e);
				if ("osm" == t.localName) {
					for (var r = S_({
							nodes: {},
							ways: [],
							features: []
						}, BS, t, [i]), o = 0; o < r.ways.length; o++) {
						for (var n = r.ways[o], s = [], a = 0, h = n.ndrefs.length; a < h; a++) st(s, r
							.nodes[n.ndrefs[a]]);
						var l = void 0;
						Jm(l = n.ndrefs[0] == n.ndrefs[n.ndrefs.length - 1] ? new Zi(s, Kt.XY, [s
							.length]) : new Vr(s, Kt.XY), !1, i);
						l = new et(l);
						l.setId(n.id), l.setProperties(n.tags), r.features.push(l)
					}
					if (r.features) return r.features
				}
				return []
			}, XS),
			zS = x_(Dl, {
				tag: WS
			});

		function XS() {
			jS.call(this), this.dataProjection = ke("EPSG:4326")
		}

		function VS(t) {
			US.call(this);
			t = t || {};
			this.dataProjection = new _e({
					code: "",
					units: pe.TILE_PIXELS
				}), this.featureClass_ = t.featureClass || NS, this.geometryName_ = t.geometryName, this
				.layerName_ = t.layerName || "layer", this.layers_ = t.layers || null, this.extent_ = null
		}

		function WS(t, e) {
			e[e.length - 1].tags[t.getAttribute("k")] = t.getAttribute("v")
		}
		Jp = T;

		function KS(t, e, i, r, o, n) {
			for (var s, a = void 0 !== o ? (s = o, void 0 !== n ? n : 0) : (s = [], 0), h = e; h < i;) {
				var l = t[h++];
				s[a++] = t[h++], s[a++] = l;
				for (var u = 2; u < r; ++u) s[a++] = t[h++]
			}
			return s.length = a, s
		}

		function HS(t, e, i) {
			for (var i = i || 1e5, r = new Array(e), o = 0; o < e; ++o) r[o] = 0;
			for (var n = 0, s = t.length; n < s;)
				for (o = 0; o < e; ++o, ++n) {
					var a = t[n],
						h = a - r[o];
					r[o] = a, t[n] = h
				}
			return qS(t, i)
		}

		function ZS(t, e, i) {
			for (var i = i || 1e5, r = new Array(e), o = 0; o < e; ++o) r[o] = 0;
			for (var n = JS(t, i), s = 0, a = n.length; s < a;)
				for (o = 0; o < e; ++o, ++s) r[o] += n[s], n[s] = r[o];
			return n
		}

		function qS(t, e) {
			for (var i = e || 1e5, r = 0, o = t.length; r < o; ++r) t[r] = Math.round(t[r] * i);
			return function(t) {
				for (var e = 0, i = t.length; e < i; ++e) {
					var r = t[e];
					t[e] = r < 0 ? ~(r << 1) : r << 1
				}
				return function(t) {
					for (var e = "", i = 0, r = t.length; i < r; ++i) e += function(t) {
						for (var e, i = ""; 32 <= t;) e = 63 + (32 | 31 & t), i += String
							.fromCharCode(e), t >>= 5;
						return e = t + 63, i += String.fromCharCode(e)
					}(t[i]);
					return e
				}(t)
			}(t)
		}

		function JS(o, t) {
			for (var e = t || 1e5, i = function() {
					for (var t = function(t) {
							for (var e = [], i = 0, r = 0, o = 0, n = t.length; o < n; ++o) {
								var s = t.charCodeAt(o) - 63;
								i |= (31 & s) << r, s < 32 ? (e.push(i), r = i = 0) : r += 5
							}
							return e
						}(o), e = 0, i = t.length; e < i; ++e) {
						var r = t[e];
						t[e] = 1 & r ? ~(r >> 1) : r >> 1
					}
					return t
				}(), r = 0, n = i.length; r < n; ++r) i[r] /= e;
			return i
		}
		var QS, Gl = ((QS = Uh) && (tC.__proto__ = QS), ((tC.prototype = Object.create(QS && QS.prototype))
				.constructor = tC).prototype.readFeatureFromText = function(t, e) {
				e = this.readGeometryFromText(t, e);
				return new et(e)
			}, tC.prototype.readFeaturesFromText = function(t, e) {
				return [this.readFeatureFromText(t, e)]
			}, tC.prototype.readGeometryFromText = function(t, e) {
				var i = ui(this.geometryLayout_),
					t = ZS(t, i, this.factor_);
				KS(t, 0, t.length, i, t);
				i = wi(t, 0, t.length, i);
				return Jm(new Vr(i, this.geometryLayout_), !1, this.adaptOptions(e))
			}, tC.prototype.writeFeatureText = function(t, e) {
				t = t.getGeometry();
				return t ? this.writeGeometryText(t, e) : ($(!1, 40), "")
			}, tC.prototype.writeFeaturesText = function(t, e) {
				return this.writeFeatureText(t[0], e)
			}, tC.prototype.writeGeometryText = function(t, e) {
				e = (t = Jm(t, !0, this.adaptOptions(e))).getFlatCoordinates(), t = t.getStride();
				return KS(e, 0, e.length, t, e), HS(e, t, this.factor_)
			}, tC),
			$S = {
				Point: function(t, e, i) {
					t = t.coordinates;
					return e && i && rC(t, e, i), new Oi(t)
				},
				LineString: function(t, e) {
					e = eC(t.arcs, e);
					return new Vr(e)
				},
				Polygon: function(t, e) {
					for (var i = [], r = 0, o = t.arcs.length; r < o; ++r) i[r] = eC(t.arcs[r], e);
					return new Zi(i)
				},
				MultiPoint: function(t, e, i) {
					var r = t.coordinates;
					if (e && i)
						for (var o = 0, n = r.length; o < n; ++o) rC(r[o], e, i);
					return new Jy(r)
				},
				MultiLineString: function(t, e) {
					for (var i = [], r = 0, o = t.arcs.length; r < o; ++r) i[r] = eC(t.arcs[r], e);
					return new qy(i)
				},
				MultiPolygon: function(t, e) {
					for (var i = [], r = 0, o = t.arcs.length; r < o; ++r) {
						for (var n = t.arcs[r], s = [], a = 0, h = n.length; a < h; ++a) s[a] = eC(n[a],
							e);
						i[r] = s
					}
					return new rm(i)
				}
			};

		function tC(t) {
			QS.call(this);
			t = t || {};
			this.dataProjection = ke("EPSG:4326"), this.factor_ = t.factor || 1e5, this.geometryLayout_ = t
				.geometryLayout || Kt.XY
		}

		function eC(t, e) {
			for (var i, r = [], o = 0, n = t.length; o < n; ++o) i = t[o], 0 < o && r.pop(), i = 0 <= i ? e[
				i] : e[~i].slice().reverse(), r.push.apply(r, i);
			for (var s = 0, a = r.length; s < a; ++s) r[s] = r[s].slice();
			return r
		}

		function iC(t, e, i, r, o, n, s) {
			var a = t.type,
				h = $S[a],
				h = "Point" === a || "MultiPoint" === a ? h(t, i, r) : h(t, e),
				e = new et;
			e.setGeometry(Jm(h, !1, s)), void 0 !== t.id && e.setId(t.id);
			t = t.properties;
			return o && ((t = t || {})[o] = n), t && e.setProperties(t), e
		}

		function rC(t, e, i) {
			t[0] = t[0] * e[0] + i[0], t[1] = t[1] * e[1] + i[1]
		}
		var oC, Ol = ((oC = Mc) && (nC.__proto__ = oC), ((nC.prototype = Object.create(oC && oC.prototype))
				.constructor = nC).prototype.readFeaturesFromObject = function(t, e) {
				if ("Topology" != t.type) return [];
				var i, t = t,
					r = null,
					o = null;
				t.transform && (r = (i = t.transform).scale, o = i.translate);
				var n = t.arcs;
				i && function(t, e, i) {
					for (var r = 0, o = t.length; r < o; ++r) ! function(t, e, i) {
						for (var r = 0, o = 0, n = 0, s = t.length; n < s; ++n) {
							var a = t[n];
							r += a[0], o += a[1], a[0] = r, a[1] = o, rC(a, e, i)
						}
					}(t[r], e, i)
				}(n, r, o);
				var s, a, h = [],
					l = t.objects,
					u = this.layerName_;
				for (a in l) this.layers_ && -1 == this.layers_.indexOf(a) || ("GeometryCollection" ===
					l[a].type ? (s = l[a], h.push.apply(h, function(t, e, i, r, o, n, s) {
						for (var a = t.geometries, h = [], l = 0, u = a.length; l < u; ++l)
							h[l] = iC(a[l], e, i, r, o, n, s);
						return h
					}(s, n, r, o, u, a, e))) : (s = l[a], h.push(iC(s, n, r, o, u, a, e))));
				return h
			}, nC.prototype.readProjectionFromObject = function(t) {
				return this.dataProjection
			}, nC),
			Gd = function(t) {
				this.tagName_ = t
			};

		function nC(t) {
			oC.call(this);
			t = t || {};
			this.layerName_ = t.layerName, this.layers_ = t.layers || null, this.dataProjection = ke(t
				.dataProjection || "EPSG:4326")
		}
		Gd.prototype.getTagName = function() {
			return this.tagName_
		};
		var sC, aC, hC, lC, uC, pC, cC, dC, _C, fC, gC, yC, mC, vC, xC, EC, SC, CC, wC, TC, RC, Fp = Gd,
			qc = ((RC = Fp) && (uw.__proto__ = RC), (uw.prototype = Object.create(RC && RC.prototype))
				.constructor = uw),
			IC = ((TC = qc) && (lw.__proto__ = TC), (lw.prototype = Object.create(TC && TC.prototype))
				.constructor = lw),
			LC = ((wC = Fp) && (hw.__proto__ = wC), (hw.prototype = Object.create(wC && wC.prototype))
				.constructor = hw),
			jo = ((CC = Fp) && (aw.__proto__ = CC), (aw.prototype = Object.create(CC && CC.prototype))
				.constructor = aw),
			bC = ((SC = jo) && (sw.__proto__ = SC), (sw.prototype = Object.create(SC && SC.prototype))
				.constructor = sw),
			e = ((EC = Fp) && (nw.__proto__ = EC), (nw.prototype = Object.create(EC && EC.prototype))
				.constructor = nw),
			PC = ((xC = e) && (ow.__proto__ = xC), (ow.prototype = Object.create(xC && xC.prototype))
				.constructor = ow),
			gf = ((vC = e) && (rw.__proto__ = vC), (rw.prototype = Object.create(vC && vC.prototype))
				.constructor = rw),
			MC = ((mC = gf) && (iw.__proto__ = mC), (iw.prototype = Object.create(mC && mC.prototype))
				.constructor = iw),
			FC = ((yC = gf) && (ew.__proto__ = yC), (ew.prototype = Object.create(yC && yC.prototype))
				.constructor = ew),
			OC = ((gC = gf) && (tw.__proto__ = gC), (tw.prototype = Object.create(gC && gC.prototype))
				.constructor = tw),
			AC = ((fC = jo) && ($C.__proto__ = fC), ($C.prototype = Object.create(fC && fC.prototype))
				.constructor = $C),
			NC = ((_C = e) && (QC.__proto__ = _C), (QC.prototype = Object.create(_C && _C.prototype))
				.constructor = QC),
			GC = ((dC = e) && (JC.__proto__ = dC), (JC.prototype = Object.create(dC && dC.prototype))
				.constructor = JC),
			DC = ((cC = e) && (qC.__proto__ = cC), (qC.prototype = Object.create(cC && cC.prototype))
				.constructor = qC),
			kC = ((pC = gf) && (ZC.__proto__ = pC), (ZC.prototype = Object.create(pC && pC.prototype))
				.constructor = ZC),
			jC = ((uC = gf) && (HC.__proto__ = uC), (HC.prototype = Object.create(uC && uC.prototype))
				.constructor = HC),
			UC = ((lC = Fp) && (KC.__proto__ = lC), (KC.prototype = Object.create(lC && lC.prototype))
				.constructor = KC),
			YC = ((hC = gf) && (WC.__proto__ = hC), (WC.prototype = Object.create(hC && hC.prototype))
				.constructor = WC),
			BC = ((aC = qc) && (VC.__proto__ = aC), (VC.prototype = Object.create(aC && aC.prototype))
				.constructor = VC),
			zC = ((sC = jo) && (XC.__proto__ = sC), (XC.prototype = Object.create(sC && sC.prototype))
				.constructor = XC);

		function XC(t, e, i) {
			sC.call(this, "Within", t, e, i)
		}

		function VC(t) {
			aC.call(this, "Or", Array.prototype.slice.call(arguments))
		}

		function WC(t, e, i) {
			hC.call(this, "PropertyIsNotEqualTo", t, e, i)
		}

		function KC(t) {
			lC.call(this, "Not"), this.condition = t
		}

		function HC(t, e) {
			uC.call(this, "PropertyIsLessThanOrEqualTo", t, e)
		}

		function ZC(t, e) {
			pC.call(this, "PropertyIsLessThan", t, e)
		}

		function qC(t) {
			cC.call(this, "PropertyIsNull", t)
		}

		function JC(t, e, i, r, o, n) {
			dC.call(this, "PropertyIsLike", t), this.pattern = e, this.wildCard = void 0 !== i ? i : "*",
				this.singleChar = void 0 !== r ? r : ".", this.escapeChar = void 0 !== o ? o : "!", this
				.matchCase = n
		}

		function QC(t, e, i) {
			_C.call(this, "PropertyIsBetween", t), this.lowerBoundary = e, this.upperBoundary = i
		}

		function $C(t, e, i) {
			fC.call(this, "Intersects", t, e, i)
		}

		function tw(t, e) {
			gC.call(this, "PropertyIsGreaterThanOrEqualTo", t, e)
		}

		function ew(t, e) {
			yC.call(this, "PropertyIsGreaterThan", t, e)
		}

		function iw(t, e, i) {
			mC.call(this, "PropertyIsEqualTo", t, e, i)
		}

		function rw(t, e, i, r) {
			vC.call(this, t, e), this.expression = i, this.matchCase = r
		}

		function ow(t, e, i) {
			xC.call(this, "During", t), this.begin = e, this.end = i
		}

		function nw(t, e) {
			EC.call(this, t), this.propertyName = e
		}

		function sw(t, e, i) {
			SC.call(this, "Contains", t, e, i)
		}

		function aw(t, e, i, r) {
			CC.call(this, t), this.geometryName = e || "the_geom", this.geometry = i, this.srsName = r
		}

		function hw(t, e, i) {
			wC.call(this, "BBOX"), this.geometryName = t, this.extent = e, this.srsName = i
		}

		function lw(t) {
			TC.call(this, "And", Array.prototype.slice.call(arguments))
		}

		function uw(t, e) {
			RC.call(this, t), this.conditions = e, $(2 <= this.conditions.length, 57)
		}

		function pw(t) {
			var e = [null].concat(Array.prototype.slice.call(arguments));
			return new(Function.prototype.bind.apply(IC, e))
		}

		function cw(t, e, i) {
			return new LC(t, e, i)
		}
		var dw, _w = {
				"http://www.opengis.net/gml": {
					boundedBy: __(fv.prototype.readGeometryElement, "bounds")
				}
			},
			fw = {
				"http://www.opengis.net/wfs": {
					totalInserted: __(Ev),
					totalUpdated: __(Ev),
					totalDeleted: __(Ev)
				}
			},
			gw = {
				"http://www.opengis.net/wfs": {
					TransactionSummary: __(function(t, e) {
						return S_({}, fw, t, e)
					}, "transactionSummary"),
					InsertResults: __(function(t, e) {
						return S_([], Rw, t, e)
					}, "insertIds")
				}
			},
			yw = {
				"http://www.opengis.net/wfs": {
					PropertyName: f_(Iv)
				}
			},
			mw = {
				"http://www.opengis.net/wfs": {
					Insert: f_(function(t, e, i) {
						var r = i[i.length - 1],
							o = r.featureType,
							n = r.featureNS,
							r = r.gmlVersion,
							o = s_(n, o);
						t.appendChild(o), (2 === r ? Gv : Mv).prototype.writeFeatureElement(o, e, i)
					}),
					Update: f_(function(t, e, i) {
						var r = i[i.length - 1];
						$(void 0 !== e.getId(), 27);
						var o = r.featureType,
							n = r.featurePrefix,
							s = r.featureNS,
							o = Lw(n, o),
							a = e.getGeometryName();
						t.setAttribute("typeName", o), t.setAttributeNS(xw, "xmlns:" + n, s);
						s = e.getId();
						if (void 0 !== s) {
							for (var h = e.getKeys(), l = [], u = 0, p = h.length; u < p; u++) {
								var c, d = e.get(h[u]);
								void 0 !== d && (c = h[u], d && "function" == typeof d
									.getSimplifiedGeometry && (c = a), l.push({
										name: c,
										value: d
									}))
							}
							w_({
								gmlVersion: r.gmlVersion,
								node: t,
								hasZ: r.hasZ,
								srsName: r.srsName
							}, mw, y_("Property"), l, i), Iw(t, s)
						}
					}),
					Delete: f_(function(t, e, i) {
						var r = i[i.length - 1];
						$(void 0 !== e.getId(), 26);
						var o = r.featureType,
							n = r.featurePrefix,
							r = r.featureNS,
							o = Lw(n, o);
						t.setAttribute("typeName", o), t.setAttributeNS(xw, "xmlns:" + n, r);
						e = e.getId();
						void 0 !== e && Iw(t, e)
					}),
					Property: f_(function(t, e, i) {
						var r = s_(Sw, "Name"),
							o = i[i.length - 1].gmlVersion;
						t.appendChild(r), Iv(r, e.name), void 0 !== e.value && null !== e.value && (
							r = s_(Sw, "Value"), t.appendChild(r), e.value && "function" ==
							typeof e.value.getSimplifiedGeometry ? (2 === o ? Gv : Mv).prototype
							.writeGeometryElement(r, e.value, i) : Iv(r, e.value))
					}),
					Native: f_(function(t, e, i) {
						e.vendorId && t.setAttribute("vendorId", e.vendorId), void 0 !== e
							.safeToIgnore && t.setAttribute("safeToIgnore", String(e.safeToIgnore)),
							void 0 !== e.value && Iv(t, e.value)
					})
				}
			},
			vw = "feature",
			xw = "http://www.w3.org/2000/xmlns/",
			Ew = "http://www.opengis.net/ogc",
			Sw = "http://www.opengis.net/wfs",
			Cw = {
				"1.1.0": "http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.1.0/wfs.xsd",
				"1.0.0": "http://www.opengis.net/wfs http://schemas.opengis.net/wfs/1.0.0/wfs.xsd"
			},
			$s = ((dw = ru) && (ww.__proto__ = dw), ((ww.prototype = Object.create(dw && dw.prototype))
				.constructor = ww).prototype.getFeatureType = function() {
				return this.featureType_
			}, ww.prototype.setFeatureType = function(t) {
				this.featureType_ = t
			}, ww.prototype.readFeaturesFromNode = function(t, e) {
				var i = {
					node: t
				};
				y(i, {
					featureType: this.featureType_,
					featureNS: this.featureNS_
				}), y(i, this.getReadOptions(t, e || {}));
				i = [i];
				return this.gmlFormat_.FEATURE_COLLECTION_PARSERS[uv].featureMember = p_(fv.prototype
					.readFeaturesInternal), S_([], this.gmlFormat_.FEATURE_COLLECTION_PARSERS, t, i,
					this.gmlFormat_) || []
			}, ww.prototype.readTransactionResponse = function(t) {
				if (t) {
					if ("string" != typeof t) return h_(t) ? this.readTransactionResponseFromDocument(
						t) : this.readTransactionResponseFromNode(t);
					t = l_(t);
					return this.readTransactionResponseFromDocument(t)
				}
			}, ww.prototype.readFeatureCollectionMetadata = function(t) {
				if (t) {
					if ("string" != typeof t) return h_(t) ? this
						.readFeatureCollectionMetadataFromDocument(t) : this
						.readFeatureCollectionMetadataFromNode(t);
					t = l_(t);
					return this.readFeatureCollectionMetadataFromDocument(t)
				}
			}, ww.prototype.readFeatureCollectionMetadataFromDocument = function(t) {
				for (var e = t.firstChild; e; e = e.nextSibling)
					if (e.nodeType == Node.ELEMENT_NODE) return this
						.readFeatureCollectionMetadataFromNode(e)
			}, ww.prototype.readFeatureCollectionMetadataFromNode = function(t) {
				var e = {},
					i = Sv(t.getAttribute("numberOfFeatures"));
				return e.numberOfFeatures = i, S_(e, _w, t, [], this.gmlFormat_)
			}, ww.prototype.readTransactionResponseFromDocument = function(t) {
				for (var e = t.firstChild; e; e = e.nextSibling)
					if (e.nodeType == Node.ELEMENT_NODE) return this.readTransactionResponseFromNode(e)
			}, ww.prototype.readTransactionResponseFromNode = function(t) {
				return S_({}, gw, t, [])
			}, ww.prototype.writeGetFeature = function(t) {
				var e = s_(Sw, "GetFeature");
				e.setAttribute("service", "WFS"), e.setAttribute("version", "1.1.0"), t && (t.handle &&
						e.setAttribute("handle", t.handle), t.outputFormat && e.setAttribute(
							"outputFormat", t.outputFormat), void 0 !== t.maxFeatures && e.setAttribute(
							"maxFeatures", String(t.maxFeatures)), t.resultType && e.setAttribute(
							"resultType", t.resultType), void 0 !== t.startIndex && e.setAttribute(
							"startIndex", String(t.startIndex)), void 0 !== t.count && e.setAttribute(
							"count", String(t.count)), void 0 !== t.viewParams && e.setAttribute(
							"viewParams ", t.viewParams), r = t.filter, t.bbox) && ($(t.geometryName,
						12), i = cw(t.geometryName, t.bbox, t.srsName), r = r ? pw(r, i) : i), e
					.setAttributeNS(n_, "xsi:schemaLocation", this.schemaLocation_);
				var i, r, o = {
					node: e
				};
				return y(o, {
					srsName: t.srsName,
					featureNS: t.featureNS || this.featureNS_,
					featurePrefix: t.featurePrefix,
					geometryName: t.geometryName,
					filter: r,
					propertyNames: t.propertyNames || []
				}), $(Array.isArray(t.featureTypes), 11), i = e, r = t.featureTypes, (o = y({}, (
					t = [o])[t.length - 1])).node = i, w_(o, bw, y_("Query"), r, t), e
			}, ww.prototype.writeTransaction = function(t, e, i, r) {
				var o, n, s = [],
					a = s_(Sw, "Transaction"),
					h = r.version || "1.1.0",
					l = "1.0.0" === h ? 2 : 3;
				a.setAttribute("service", "WFS"), a.setAttribute("version", h), r && (o = r
					.gmlOptions || {}, r.handle && a.setAttribute("handle", r.handle));
				h = Cw[h];
				a.setAttributeNS(n_, "xsi:schemaLocation", h);
				h = r.featurePrefix || vw;
				return t && (n = y({
					node: a
				}, {
					featureNS: r.featureNS,
					featureType: r.featureType,
					featurePrefix: h,
					gmlVersion: l,
					hasZ: r.hasZ,
					srsName: r.srsName
				}), y(n, o), w_(n, mw, y_("Insert"), t, s)), e && (n = y({
					node: a
				}, {
					featureNS: r.featureNS,
					featureType: r.featureType,
					featurePrefix: h,
					gmlVersion: l,
					hasZ: r.hasZ,
					srsName: r.srsName
				}), y(n, o), w_(n, mw, y_("Update"), e, s)), i && w_({
					node: a,
					featureNS: r.featureNS,
					featureType: r.featureType,
					featurePrefix: h,
					gmlVersion: l,
					srsName: r.srsName
				}, mw, y_("Delete"), i, s), r.nativeElements && w_({
					node: a,
					featureNS: r.featureNS,
					featureType: r.featureType,
					featurePrefix: h,
					gmlVersion: l,
					srsName: r.srsName
				}, mw, y_("Native"), r.nativeElements, s), a
			}, ww.prototype.readProjectionFromDocument = function(t) {
				for (var e = t.firstChild; e; e = e.nextSibling)
					if (e.nodeType == Node.ELEMENT_NODE) return this.readProjectionFromNode(e);
				return null
			}, ww.prototype.readProjectionFromNode = function(t) {
				if (t.firstElementChild && t.firstElementChild.firstElementChild)
					for (var e = (t = t.firstElementChild.firstElementChild).firstElementChild; e; e = e
						.nextElementSibling)
						if (0 !== e.childNodes.length && (1 !== e.childNodes.length || 3 !== e
								.firstChild.nodeType)) {
							var i = [{}];
							return this.gmlFormat_.readGeometryElement(e, i), ke(i.pop().srsName)
						} return null
			}, ww);

		function ww(t) {
			dw.call(this);
			t = t || {};
			this.featureType_ = t.featureType, this.featureNS_ = t.featureNS, this.gmlFormat_ = t
				.gmlFormat || new Mv, this.schemaLocation_ = t.schemaLocation || Cw["1.1.0"]
		}
		var Tw = {
				"http://www.opengis.net/ogc": {
					FeatureId: p_(function(t, e) {
						return t.getAttribute("fid")
					})
				}
			},
			Rw = {
				"http://www.opengis.net/wfs": {
					Feature: function(t, e) {
						E_(Tw, t, e)
					}
				}
			};

		function Iw(t, e) {
			var i = s_(Ew, "Filter"),
				r = s_(Ew, "FeatureId");
			i.appendChild(r), r.setAttribute("fid", e), t.appendChild(i)
		}

		function Lw(t, e) {
			t = (t = t || vw) + ":";
			return 0 === e.indexOf(t) ? e : t + e
		}
		var bw = {
			"http://www.opengis.net/wfs": {
				Query: f_(function(t, e, i) {
					var r = i[i.length - 1],
						o = r.featurePrefix,
						n = r.featureNS,
						s = r.propertyNames,
						a = r.srsName,
						e = o ? Lw(o, e) : e;
					t.setAttribute("typeName", e), a && t.setAttribute("srsName", a), n && t
						.setAttributeNS(xw, "xmlns:" + o, n);
					n = y({}, r);
					n.node = t, w_(n, yw, y_("PropertyName"), s, i);
					s = r.filter;
					s && (r = s_(Ew, "Filter"), t.appendChild(r), Pw(r, s, i))
				})
			},
			"http://www.opengis.net/ogc": {
				During: f_(function(t, e, i) {
					var r = s_("http://www.opengis.net/fes", "ValueReference");
					Iv(r, e.propertyName), t.appendChild(r);
					r = s_(uv, "TimePeriod");
					t.appendChild(r);
					t = s_(uv, "begin");
					r.appendChild(t), Gw(t, e.begin);
					t = s_(uv, "end");
					r.appendChild(t), Gw(t, e.end)
				}),
				And: f_(Mw),
				Or: f_(Mw),
				Not: f_(function(t, e, i) {
					t = {
						node: t
					}, e = e.condition;
					w_(t, bw, y_(e.getTagName()), [e], i)
				}),
				BBOX: f_(function(t, e, i) {
					i[i.length - 1].srsName = e.srsName, Aw(t, e.geometryName), Mv.prototype
						.writeGeometryElement(t, e.extent, i)
				}),
				Contains: f_(function(t, e, i) {
					i[i.length - 1].srsName = e.srsName, Aw(t, e.geometryName), Mv.prototype
						.writeGeometryElement(t, e.geometry, i)
				}),
				Intersects: f_(function(t, e, i) {
					i[i.length - 1].srsName = e.srsName, Aw(t, e.geometryName), Mv.prototype
						.writeGeometryElement(t, e.geometry, i)
				}),
				Within: f_(function(t, e, i) {
					i[i.length - 1].srsName = e.srsName, Aw(t, e.geometryName), Mv.prototype
						.writeGeometryElement(t, e.geometry, i)
				}),
				PropertyIsEqualTo: f_(Fw),
				PropertyIsNotEqualTo: f_(Fw),
				PropertyIsLessThan: f_(Fw),
				PropertyIsLessThanOrEqualTo: f_(Fw),
				PropertyIsGreaterThan: f_(Fw),
				PropertyIsGreaterThanOrEqualTo: f_(Fw),
				PropertyIsNull: f_(function(t, e, i) {
					Aw(t, e.propertyName)
				}),
				PropertyIsBetween: f_(function(t, e, i) {
					Aw(t, e.propertyName);
					var r = s_(Ew, "LowerBoundary");
					t.appendChild(r), Nw(r, "" + e.lowerBoundary);
					r = s_(Ew, "UpperBoundary");
					t.appendChild(r), Nw(r, "" + e.upperBoundary)
				}),
				PropertyIsLike: f_(function(t, e, i) {
					t.setAttribute("wildCard", e.wildCard), t.setAttribute("singleChar", e
							.singleChar), t.setAttribute("escapeChar", e.escapeChar), void 0 !==
						e.matchCase && t.setAttribute("matchCase", e.matchCase.toString()), Aw(
							t, e.propertyName), Nw(t, "" + e.pattern)
				})
			}
		};

		function Pw(t, e, i) {
			w_({
				node: t
			}, bw, y_(e.getTagName()), [e], i)
		}

		function Mw(t, e, i) {
			for (var r = {
					node: t
				}, o = e.conditions, n = 0, s = o.length; n < s; ++n) {
				var a = o[n];
				w_(r, bw, y_(a.getTagName()), [a], i)
			}
		}

		function Fw(t, e, i) {
			void 0 !== e.matchCase && t.setAttribute("matchCase", e.matchCase.toString()), Aw(t, e
				.propertyName), Nw(t, "" + e.expression)
		}

		function Ow(t, e, i) {
			t = s_(Ew, t);
			Iv(t, i), e.appendChild(t)
		}

		function Aw(t, e) {
			Ow("PropertyName", t, e)
		}

		function Nw(t, e) {
			Ow("Literal", t, e)
		}

		function Gw(t, e) {
			var i = s_(uv, "TimeInstant");
			t.appendChild(i);
			t = s_(uv, "timePosition");
			i.appendChild(t), Iv(t, e)
		}
		var Dw, Dl = $s,
			kw = {
				POINT: Oi,
				LINESTRING: Vr,
				POLYGON: Zi,
				MULTIPOINT: Jy,
				MULTILINESTRING: qy,
				MULTIPOLYGON: rm
			},
			jw = "EMPTY",
			Uw = "Z",
			Yw = "M",
			Bw = {};
		for (Dw in Ht) Bw[Dw] = Ht[Dw].toUpperCase();
		var zw = function(t) {
			this.wkt = t, this.index_ = -1
		};
		zw.prototype.isAlpha_ = function(t) {
			return "a" <= t && t <= "z" || "A" <= t && t <= "Z"
		}, zw.prototype.isNumeric_ = function(t, e) {
			return "0" <= t && t <= "9" || "." == t && !(void 0 !== e && e)
		}, zw.prototype.isWhiteSpace_ = function(t) {
			return " " == t || "\t" == t || "\r" == t || "\n" == t
		}, zw.prototype.nextChar_ = function() {
			return this.wkt.charAt(++this.index_)
		}, zw.prototype.nextToken = function() {
			var t, e = this.nextChar_(),
				i = this.index_,
				r = e;
			if ("(" == e) t = 2;
			else if ("," == e) t = 5;
			else if (")" == e) t = 3;
			else if (this.isNumeric_(e) || "-" == e) t = 4, r = this.readNumber_();
			else if (this.isAlpha_(e)) t = 1, r = this.readText_();
			else {
				if (this.isWhiteSpace_(e)) return this.nextToken();
				if ("" !== e) throw new Error("Unexpected character: " + e);
				t = 6
			}
			return {
				position: i,
				value: r,
				type: t
			}
		}, zw.prototype.readNumber_ = function() {
			for (var t, e = this.index_, i = !1, r = !1;
				"." == t ? i = !0 : "e" != t && "E" != t || (r = !0), t = this.nextChar_(), this
				.isNumeric_(t, i) || !r && ("e" == t || "E" == t) || r && ("-" == t || "+" == t););
			return parseFloat(this.wkt.substring(e, this.index_--))
		}, zw.prototype.readText_ = function() {
			for (var t, e = this.index_; t = this.nextChar_(), this.isAlpha_(t););
			return this.wkt.substring(e, this.index_--).toUpperCase()
		};
		var Xw = function(t) {
			this.lexer_ = t, this.token_, this.layout_ = Kt.XY
		};

		function Vw(t) {
			t = t.getCoordinates();
			return 0 === t.length ? "" : t.join(" ")
		}

		function Ww(t) {
			for (var e = t.getCoordinates(), i = [], r = 0, o = e.length; r < o; ++r) i.push(e[r].join(
			" "));
			return i.join(",")
		}

		function Kw(t) {
			for (var e = [], i = t.getLinearRings(), r = 0, o = i.length; r < o; ++r) e.push("(" + Ww(i[
				r]) + ")");
			return e.join(",")
		}
		Xw.prototype.consume_ = function() {
			this.token_ = this.lexer_.nextToken()
		}, Xw.prototype.isTokenType = function(t) {
			return this.token_.type == t
		}, Xw.prototype.match = function(t) {
			t = this.isTokenType(t);
			return t && this.consume_(), t
		}, Xw.prototype.parse = function() {
			return this.consume_(), this.parseGeometry_()
		}, Xw.prototype.parseGeometryLayout_ = function() {
			var t = Kt.XY,
				e = this.token_;
			return this.isTokenType(1) && ((e = e.value) === Uw ? t = Kt.XYZ : e === Yw ? t = Kt.XYM :
				"ZM" === e && (t = Kt.XYZM), t !== Kt.XY && this.consume_()), t
		}, Xw.prototype.parseGeometryCollectionText_ = function() {
			if (this.match(2)) {
				for (var t = []; t.push(this.parseGeometry_()), this.match(5););
				if (this.match(3)) return t
			} else if (this.isEmptyGeometry_()) return [];
			throw new Error(this.formatErrorMessage_())
		}, Xw.prototype.parsePointText_ = function() {
			if (this.match(2)) {
				var t = this.parsePoint_();
				if (this.match(3)) return t
			} else if (this.isEmptyGeometry_()) return null;
			throw new Error(this.formatErrorMessage_())
		}, Xw.prototype.parseLineStringText_ = function() {
			if (this.match(2)) {
				var t = this.parsePointList_();
				if (this.match(3)) return t
			} else if (this.isEmptyGeometry_()) return [];
			throw new Error(this.formatErrorMessage_())
		}, Xw.prototype.parsePolygonText_ = function() {
			if (this.match(2)) {
				var t = this.parseLineStringTextList_();
				if (this.match(3)) return t
			} else if (this.isEmptyGeometry_()) return [];
			throw new Error(this.formatErrorMessage_())
		}, Xw.prototype.parseMultiPointText_ = function() {
			var t;
			if (this.match(2)) {
				if (t = 2 == this.token_.type ? this.parsePointTextList_() : this.parsePointList_(),
					this.match(3)) return t
			} else if (this.isEmptyGeometry_()) return [];
			throw new Error(this.formatErrorMessage_())
		}, Xw.prototype.parseMultiLineStringText_ = function() {
			if (this.match(2)) {
				var t = this.parseLineStringTextList_();
				if (this.match(3)) return t
			} else if (this.isEmptyGeometry_()) return [];
			throw new Error(this.formatErrorMessage_())
		}, Xw.prototype.parseMultiPolygonText_ = function() {
			if (this.match(2)) {
				var t = this.parsePolygonTextList_();
				if (this.match(3)) return t
			} else if (this.isEmptyGeometry_()) return [];
			throw new Error(this.formatErrorMessage_())
		}, Xw.prototype.parsePoint_ = function() {
			for (var t = [], e = this.layout_.length, i = 0; i < e; ++i) {
				var r = this.token_;
				if (!this.match(4)) break;
				t.push(r.value)
			}
			if (t.length == e) return t;
			throw new Error(this.formatErrorMessage_())
		}, Xw.prototype.parsePointList_ = function() {
			for (var t = [this.parsePoint_()]; this.match(5);) t.push(this.parsePoint_());
			return t
		}, Xw.prototype.parsePointTextList_ = function() {
			for (var t = [this.parsePointText_()]; this.match(5);) t.push(this.parsePointText_());
			return t
		}, Xw.prototype.parseLineStringTextList_ = function() {
			for (var t = [this.parseLineStringText_()]; this.match(5);) t.push(this
				.parseLineStringText_());
			return t
		}, Xw.prototype.parsePolygonTextList_ = function() {
			for (var t = [this.parsePolygonText_()]; this.match(5);) t.push(this.parsePolygonText_());
			return t
		}, Xw.prototype.isEmptyGeometry_ = function() {
			var t = this.isTokenType(1) && this.token_.value == jw;
			return t && this.consume_(), t
		}, Xw.prototype.formatErrorMessage_ = function() {
			return "Unexpected `" + this.token_.value + "` at position " + this.token_.position +
				" in `" + this.lexer_.wkt + "`"
		}, Xw.prototype.parseGeometry_ = function() {
			var t = this.token_;
			if (this.match(1)) {
				var e = t.value;
				if (this.layout_ = this.parseGeometryLayout_(), "GEOMETRYCOLLECTION" == e) {
					var i = this.parseGeometryCollectionText_();
					return new Zm(i)
				}
				var r, i = kw[e];
				if (!i) throw new Error("Invalid geometry type: " + e);
				switch (e) {
					case "POINT":
						r = this.parsePointText_();
						break;
					case "LINESTRING":
						r = this.parseLineStringText_();
						break;
					case "POLYGON":
						r = this.parsePolygonText_();
						break;
					case "MULTIPOINT":
						r = this.parseMultiPointText_();
						break;
					case "MULTILINESTRING":
						r = this.parseMultiLineStringText_();
						break;
					case "MULTIPOLYGON":
						r = this.parseMultiPolygonText_();
						break;
					default:
						throw new Error("Invalid geometry type: " + e)
				}
				return new i(r = r || (i === kw.POINT ? [NaN, NaN] : []), this.layout_)
			}
			throw new Error(this.formatErrorMessage_())
		};
		var Hw = {
			Point: Vw,
			LineString: Ww,
			Polygon: Kw,
			MultiPoint: function(t) {
				for (var e = [], i = t.getPoints(), r = 0, o = i.length; r < o; ++r) e.push("(" +
					Vw(i[r]) + ")");
				return e.join(",")
			},
			MultiLineString: function(t) {
				for (var e = [], i = t.getLineStrings(), r = 0, o = i.length; r < o; ++r) e.push(
					"(" + Ww(i[r]) + ")");
				return e.join(",")
			},
			MultiPolygon: function(t) {
				for (var e = [], i = t.getPolygons(), r = 0, o = i.length; r < o; ++r) e.push("(" +
					Kw(i[r]) + ")");
				return e.join(",")
			},
			GeometryCollection: function(t) {
				for (var e = [], i = t.getGeometries(), r = 0, o = i.length; r < o; ++r) e.push(Zw(
					i[r]));
				return e.join(",")
			}
		};

		function Zw(t) {
			var e, i = t.getType(),
				r = (0, Hw[i])(t),
				i = i.toUpperCase();
			return "function" == typeof t.getFlatCoordinates && (e = t.getLayout(), t = "", e !== Kt.XYZ &&
				e !== Kt.XYZM || (t += Uw), e !== Kt.XYM && e !== Kt.XYZM || (t += Yw), 0 < (t = t)
				.length && (i += " " + t)), 0 === r.length ? i + " " + jw : i + "(" + r + ")"
		}
		var qw, T = ((qw = Uh) && (Jw.__proto__ = qw), ((Jw.prototype = Object.create(qw && qw.prototype))
			.constructor = Jw).prototype.parse_ = function(t) {
			t = new zw(t);
			return new Xw(t).parse()
		}, Jw.prototype.readFeatureFromText = function(t, e) {
			t = this.readGeometryFromText(t, e);
			if (t) {
				e = new et;
				return e.setGeometry(t), e
			}
			return null
		}, Jw.prototype.readFeaturesFromText = function(t, e) {
			for (var i, e = this.readGeometryFromText(t, e), r = [], o = 0, n = (i = this
					.splitCollection_ && e.getType() == Ht.GEOMETRY_COLLECTION ? e
					.getGeometriesArray() : [e]).length; o < n; ++o) {
				var s = new et;
				s.setGeometry(i[o]), r.push(s)
			}
			return r
		}, Jw.prototype.readGeometryFromText = function(t, e) {
			t = this.parse_(t);
			return t ? Jm(t, !1, e) : null
		}, Jw.prototype.writeFeatureText = function(t, e) {
			t = t.getGeometry();
			return t ? this.writeGeometryText(t, e) : ""
		}, Jw.prototype.writeFeaturesText = function(t, e) {
			if (1 == t.length) return this.writeFeatureText(t[0], e);
			for (var i = [], r = 0, o = t.length; r < o; ++r) i.push(t[r].getGeometry());
			var n = new Zm(i);
			return this.writeGeometryText(n, e)
		}, Jw.prototype.writeGeometryText = function(t, e) {
			return Zw(Jm(t, !0, e))
		}, Jw);

		function Jw(t) {
			qw.call(this);
			t = t || {};
			this.splitCollection_ = void 0 !== t.splitCollection && t.splitCollection
		}

		function Qw(t) {
			return t.getAttributeNS("http://www.w3.org/1999/xlink", "href")
		}
		Mc = function() {};
		Mc.prototype.read = function(t) {
			if (t) {
				if ("string" != typeof t) return h_(t) ? this.readFromDocument(t) : this.readFromNode(
				t);
				t = l_(t);
				return this.readFromDocument(t)
			}
			return null
		}, Mc.prototype.readFromDocument = function(t) {}, Mc.prototype.readFromNode = function(t) {};
		var $w, Gd = Mc,
			e = [null, "http://www.opengis.net/wms"],
			tT = x_(e, {
				Service: __(function(t, e) {
					return S_({}, iT, t, e)
				}),
				Capability: __(function(t, e) {
					return S_({}, eT, t, e)
				})
			}),
			eT = x_(e, {
				Request: __(function(t, e) {
					return S_({}, uT, t, e)
				}),
				Exception: __(function(t, e) {
					return S_([], sT, t, e)
				}),
				Layer: __(function(t, e) {
					return S_({}, aT, t, e)
				})
			}),
			Fp = (($w = Gd) && (yT.__proto__ = $w), ((yT.prototype = Object.create($w && $w.prototype))
				.constructor = yT).prototype.readFromDocument = function(t) {
				for (var e = t.firstChild; e; e = e.nextSibling)
					if (e.nodeType == Node.ELEMENT_NODE) return this.readFromNode(e);
				return null
			}, yT.prototype.readFromNode = function(t) {
				return this.version = t.getAttribute("version").trim(), S_({
					version: this.version
				}, tT, t, []) || null
			}, yT),
			iT = x_(e, {
				Name: __(Cv),
				Title: __(Cv),
				Abstract: __(Cv),
				KeywordList: __(ET),
				OnlineResource: __(Qw),
				ContactInformation: __(function(t, e) {
					return S_({}, rT, t, e)
				}),
				Fees: __(Cv),
				AccessConstraints: __(Cv),
				LayerLimit: __(Ev),
				MaxWidth: __(Ev),
				MaxHeight: __(Ev)
			}),
			rT = x_(e, {
				ContactPersonPrimary: __(function(t, e) {
					return S_({}, oT, t, e)
				}),
				ContactPosition: __(Cv),
				ContactAddress: __(function(t, e) {
					return S_({}, nT, t, e)
				}),
				ContactVoiceTelephone: __(Cv),
				ContactFacsimileTelephone: __(Cv),
				ContactElectronicMailAddress: __(Cv)
			}),
			oT = x_(e, {
				ContactPerson: __(Cv),
				ContactOrganization: __(Cv)
			}),
			nT = x_(e, {
				AddressType: __(Cv),
				Address: __(Cv),
				City: __(Cv),
				StateOrProvince: __(Cv),
				PostCode: __(Cv),
				Country: __(Cv)
			}),
			sT = x_(e, {
				Format: p_(Cv)
			}),
			aT = x_(e, {
				Name: __(Cv),
				Title: __(Cv),
				Abstract: __(Cv),
				KeywordList: __(ET),
				CRS: d_(Cv),
				EX_GeographicBoundingBox: __(function(t, e) {
					var i = S_({}, lT, t, e);
					if (i) {
						var r = i.westBoundLongitude,
							t = i.southBoundLatitude,
							e = i.eastBoundLongitude,
							i = i.northBoundLatitude;
						if (void 0 !== r && void 0 !== t && void 0 !== e && void 0 !== i)
						return [r, t, e, i]
					}
				}),
				BoundingBox: d_(function(t, e) {
					var i = [xv(t.getAttribute("minx")), xv(t.getAttribute("miny")), xv(t
							.getAttribute("maxx")), xv(t.getAttribute("maxy"))],
						r = [xv(t.getAttribute("resx")), xv(t.getAttribute("resy"))];
					return {
						crs: t.getAttribute("CRS"),
						extent: i,
						res: r
					}
				}),
				Dimension: d_(function(t, e) {
					return {
						name: t.getAttribute("name"),
						units: t.getAttribute("units"),
						unitSymbol: t.getAttribute("unitSymbol"),
						"default": t.getAttribute("default"),
						multipleValues: yv(t.getAttribute("multipleValues")),
						nearestValue: yv(t.getAttribute("nearestValue")),
						current: yv(t.getAttribute("current")),
						values: Cv(t)
					}
				}),
				Attribution: __(function(t, e) {
					return S_({}, hT, t, e)
				}),
				AuthorityURL: d_(function(t, e) {
					e = mT(t, e);
					if (e) return e.name = t.getAttribute("name"), e
				}),
				Identifier: d_(Cv),
				MetadataURL: d_(function(t, e) {
					e = mT(t, e);
					if (e) return e.type = t.getAttribute("type"), e
				}),
				DataURL: d_(mT),
				FeatureListURL: d_(mT),
				Style: d_(function(t, e) {
					return S_({}, _T, t, e)
				}),
				MinScaleDenominator: __(vv),
				MaxScaleDenominator: __(vv),
				Layer: d_(function(t, e) {
					var i = e[e.length - 1],
						r = S_({}, aT, t, e);
					if (r) {
						e = yv(t.getAttribute("queryable"));
						void 0 === e && (e = i.queryable), r.queryable = void 0 !== e && e;
						e = Sv(t.getAttribute("cascaded"));
						void 0 === e && (e = i.cascaded), r.cascaded = e;
						e = yv(t.getAttribute("opaque"));
						void 0 === e && (e = i.opaque), r.opaque = void 0 !== e && e;
						e = yv(t.getAttribute("noSubsets"));
						void 0 === e && (e = i.noSubsets), r.noSubsets = void 0 !== e && e;
						e = (e = xv(t.getAttribute("fixedWidth"))) || i.fixedWidth;
						r.fixedWidth = e;
						t = (t = xv(t.getAttribute("fixedHeight"))) || i.fixedHeight;
						return r.fixedHeight = t, ["Style", "CRS", "AuthorityURL"].forEach(
							function(t) {
								var e;
								t in i && (e = r[t] || [], r[t] = e.concat(i[t]))
							}), ["EX_GeographicBoundingBox", "BoundingBox", "Dimension",
							"Attribution", "MinScaleDenominator", "MaxScaleDenominator"
						].forEach(function(t) {
							var e;
							t in r || (e = i[t], r[t] = e)
						}), r
					}
				})
			}),
			hT = x_(e, {
				Title: __(Cv),
				OnlineResource: __(Qw),
				LogoURL: __(xT)
			}),
			lT = x_(e, {
				westBoundLongitude: __(vv),
				eastBoundLongitude: __(vv),
				southBoundLatitude: __(vv),
				northBoundLatitude: __(vv)
			}),
			uT = x_(e, {
				GetCapabilities: __(vT),
				GetMap: __(vT),
				GetFeatureInfo: __(vT)
			}),
			pT = x_(e, {
				Format: d_(Cv),
				DCPType: d_(function(t, e) {
					return S_({}, cT, t, e)
				})
			}),
			cT = x_(e, {
				HTTP: __(function(t, e) {
					return S_({}, dT, t, e)
				})
			}),
			dT = x_(e, {
				Get: __(mT),
				Post: __(mT)
			}),
			_T = x_(e, {
				Name: __(Cv),
				Title: __(Cv),
				Abstract: __(Cv),
				LegendURL: d_(xT),
				StyleSheetURL: __(mT),
				StyleURL: __(mT)
			}),
			fT = x_(e, {
				Format: __(Cv),
				OnlineResource: __(Qw)
			}),
			gT = x_(e, {
				Keyword: p_(Cv)
			});

		function yT() {
			$w.call(this), this.version = void 0
		}

		function mT(t, e) {
			return S_({}, fT, t, e)
		}

		function vT(t, e) {
			return S_({}, pT, t, e)
		}

		function xT(t, e) {
			e = mT(t, e);
			if (e) {
				t = [Sv(t.getAttribute("width")), Sv(t.getAttribute("height"))];
				return e.size = t, e
			}
		}

		function ET(t, e) {
			return S_([], gT, t, e)
		}
		var ST, CT, gf = Fp,
			qc = ((CT = ru) && (jT.__proto__ = CT), ((jT.prototype = Object.create(CT && CT.prototype))
				.constructor = jT).prototype.getLayers = function() {
				return this.layers_
			}, jT.prototype.setLayers = function(t) {
				this.layers_ = t
			}, jT.prototype.readFeatures_ = function(t, e) {
				t.setAttribute("namespaceURI", this.featureNS_);
				var i = t.localName,
					r = [];
				if (0 === t.childNodes.length) return r;
				if ("msGMLOutput" == i)
					for (var o = 0, n = t.childNodes.length; o < n; o++) {
						var s, a, h, l = t.childNodes[o];
						l.nodeType === Node.ELEMENT_NODE && (h = l, s = e[0], a = h.localName.replace(
							"_layer", ""), this.layers_ && !ot(this.layers_, a) || (l = a +
							"_feature", s.featureType = l, s.featureNS = this.featureNS_, (
								a = {})[l] = p_(this.gmlFormat_.readFeatureElement, this
								.gmlFormat_), a = x_([s.featureNS, null], a), h.setAttribute(
								"namespaceURI", this.featureNS_), (h = S_([], a, h, e, this
								.gmlFormat_)) && st(r, h)))
					}
				return "FeatureCollection" != i || (i = S_([], this.gmlFormat_
					.FEATURE_COLLECTION_PARSERS, t, [{}], this.gmlFormat_)) && (r = i), r
			}, jT.prototype.readFeaturesFromNode = function(t, e) {
				var i = {};
				return e && y(i, this.getReadOptions(t, e)), this.readFeatures_(t, [i])
			}, jT),
			jo = [null, "http://www.opengis.net/ows/1.1"],
			wT = x_(jo, {
				ServiceIdentification: __(function(t, e) {
					return S_({}, GT, t, e)
				}),
				ServiceProvider: __(function(t, e) {
					return S_({}, DT, t, e)
				}),
				OperationsMetadata: __(function(t, e) {
					return S_({}, FT, t, e)
				})
			}),
			$s = ((ST = Gd) && (kT.__proto__ = ST), ((kT.prototype = Object.create(ST && ST.prototype))
				.constructor = kT).prototype.readFromDocument = function(t) {
				for (var e = t.firstChild; e; e = e.nextSibling)
					if (e.nodeType == Node.ELEMENT_NODE) return this.readFromNode(e);
				return null
			}, kT.prototype.readFromNode = function(t) {
				return S_({}, wT, t, []) || null
			}, kT),
			TT = x_(jo, {
				DeliveryPoint: __(Cv),
				City: __(Cv),
				AdministrativeArea: __(Cv),
				PostalCode: __(Cv),
				Country: __(Cv),
				ElectronicMailAddress: __(Cv)
			}),
			RT = x_(jo, {
				Value: d_(function(t, e) {
					return Cv(t)
				})
			}),
			IT = x_(jo, {
				AllowedValues: __(function(t, e) {
					return S_({}, RT, t, e)
				})
			}),
			LT = x_(jo, {
				Phone: __(function(t, e) {
					return S_({}, OT, t, e)
				}),
				Address: __(function(t, e) {
					return S_({}, TT, t, e)
				})
			}),
			bT = x_(jo, {
				HTTP: __(function(t, e) {
					return S_({}, PT, t, e)
				})
			}),
			PT = x_(jo, {
				Get: d_(function(t, e) {
					var i = Qw(t);
					if (i) return S_({
						href: i
					}, AT, t, e)
				}),
				Post: void 0
			}),
			MT = x_(jo, {
				DCP: __(function(t, e) {
					return S_({}, bT, t, e)
				})
			}),
			FT = x_(jo, {
				Operation: function(t, e) {
					var i = t.getAttribute("name"),
						t = S_({}, MT, t, e);
					t && (e[e.length - 1][i] = t)
				}
			}),
			OT = x_(jo, {
				Voice: __(Cv),
				Facsimile: __(Cv)
			}),
			AT = x_(jo, {
				Constraint: d_(function(t, e) {
					var i = t.getAttribute("name");
					if (i) return S_({
						name: i
					}, IT, t, e)
				})
			}),
			NT = x_(jo, {
				IndividualName: __(Cv),
				PositionName: __(Cv),
				ContactInfo: __(function(t, e) {
					return S_({}, LT, t, e)
				})
			}),
			GT = x_(jo, {
				Abstract: __(Cv),
				AccessConstraints: __(Cv),
				Fees: __(Cv),
				Title: __(Cv),
				ServiceTypeVersion: __(Cv),
				ServiceType: __(Cv)
			}),
			DT = x_(jo, {
				ProviderName: __(Cv),
				ProviderSite: __(Qw),
				ServiceContact: __(function(t, e) {
					return S_({}, NT, t, e)
				})
			});

		function kT() {
			ST.call(this)
		}

		function jT(t) {
			CT.call(this);
			t = t || {};
			this.featureNS_ = "http://mapserver.gis.umn.edu/mapserver", this.gmlFormat_ = new Gv, this
				.layers_ = t.layers || null
		}
		var UT, YT = $s,
			Uh = [null, "http://www.opengis.net/wmts/1.0"],
			Mc = [null, "http://www.opengis.net/ows/1.1"],
			BT = x_(Uh, {
				Contents: __(function(t, e) {
					return S_({}, zT, t, e)
				})
			}),
			e = ((UT = Gd) && ($T.__proto__ = UT), (($T.prototype = Object.create(UT && UT.prototype))
				.constructor = $T).prototype.readFromDocument = function(t) {
				for (var e = t.firstChild; e; e = e.nextSibling)
					if (e.nodeType == Node.ELEMENT_NODE) return this.readFromNode(e);
				return null
			}, $T.prototype.readFromNode = function(t) {
				var e = t.getAttribute("version").trim(),
					i = this.owsParser_.readFromNode(t);
				return i ? (i.version = e, (i = S_(i, BT, t, [])) || null) : null
			}, $T),
			zT = x_(Uh, {
				Layer: d_(function(t, e) {
					return S_({}, XT, t, e)
				}),
				TileMatrixSet: d_(function(t, e) {
					return S_({}, JT, t, e)
				})
			}),
			XT = x_(Uh, {
				Style: d_(function(t, e) {
					e = S_({}, VT, t, e);
					if (e) {
						t = "true" === t.getAttribute("isDefault");
						return e.isDefault = t, e
					}
				}),
				Format: d_(Cv),
				TileMatrixSetLink: d_(function(t, e) {
					return S_({}, WT, t, e)
				}),
				Dimension: d_(function(t, e) {
					return S_({}, ZT, t, e)
				}),
				ResourceURL: d_(function(t, e) {
					var i = t.getAttribute("format"),
						r = t.getAttribute("template"),
						o = t.getAttribute("resourceType"),
						t = {};
					return i && (t.format = i), r && (t.template = r), o && (t.resourceType =
						o), t
				})
			}, x_(Mc, {
				Title: __(Cv),
				Abstract: __(Cv),
				WGS84BoundingBox: __(function(t, e) {
					e = S_([], qT, t, e);
					if (2 == e.length) return ft(e)
				}),
				Identifier: __(Cv)
			})),
			VT = x_(Uh, {
				LegendURL: d_(function(t, e) {
					var i = {};
					return i.format = t.getAttribute("format"), i.href = Qw(t), i
				})
			}, x_(Mc, {
				Title: __(Cv),
				Identifier: __(Cv)
			})),
			WT = x_(Uh, {
				TileMatrixSet: __(Cv),
				TileMatrixSetLimits: __(function(t, e) {
					return S_([], KT, t, e)
				})
			}),
			KT = x_(Uh, {
				TileMatrixLimits: p_(function(t, e) {
					return S_({}, HT, t, e)
				})
			}),
			HT = x_(Uh, {
				TileMatrix: __(Cv),
				MinTileRow: __(Ev),
				MaxTileRow: __(Ev),
				MinTileCol: __(Ev),
				MaxTileCol: __(Ev)
			}),
			ZT = x_(Uh, {
				Default: __(Cv),
				Value: d_(Cv)
			}, x_(Mc, {
				Identifier: __(Cv)
			})),
			qT = x_(Mc, {
				LowerCorner: p_(tR),
				UpperCorner: p_(tR)
			}),
			JT = x_(Uh, {
				WellKnownScaleSet: __(Cv),
				TileMatrix: d_(function(t, e) {
					return S_({}, QT, t, e)
				})
			}, x_(Mc, {
				SupportedCRS: __(Cv),
				Identifier: __(Cv)
			})),
			QT = x_(Uh, {
				TopLeftCorner: __(tR),
				ScaleDenominator: __(vv),
				TileWidth: __(Ev),
				TileHeight: __(Ev),
				MatrixWidth: __(Ev),
				MatrixHeight: __(Ev)
			}, x_(Mc, {
				Identifier: __(Cv)
			}));

		function $T() {
			UT.call(this), this.owsParser_ = new YT
		}

		function tR(t, e) {
			var i = Cv(t).split(/\s+/);
			if (i && 2 == i.length) {
				t = +i[0], i = +i[1];
				if (!isNaN(t) && !isNaN(i)) return [t, i]
			}
		}
		var eR, Fp = e,
			iR = function() {
				var t;
				return eR || ((t = document.body).webkitRequestFullscreen ? eR = "webkitfullscreenchange" :
					t.mozRequestFullScreen ? eR = "mozfullscreenchange" : t.msRequestFullscreen ? eR =
					"MSFullscreenChange" : t.requestFullscreen && (eR = "fullscreenchange")), eR
			};

		function rR() {
			var t = document.body;
			return t.webkitRequestFullscreen || t.mozRequestFullScreen && document.mozFullScreenEnabled || t
				.msRequestFullscreen && document.msFullscreenEnabled || t.requestFullscreen && document
				.fullscreenEnabled
		}

		function oR() {
			return !!(document.webkitIsFullScreen || document.mozFullScreen || document
				.msFullscreenElement || document.fullscreenElement)
		}

		function nR(t) {
			t.requestFullscreen ? t.requestFullscreen() : t.msRequestFullscreen ? t.msRequestFullscreen() :
				t.mozRequestFullScreen ? t.mozRequestFullScreen() : t.webkitRequestFullscreen && t
				.webkitRequestFullscreen()
		}
		var sR, ru = ((sR = Xs) && (hR.__proto__ = sR), ((hR.prototype = Object.create(sR && sR.prototype))
				.constructor = hR).prototype.handleClick_ = function(t) {
				t.preventDefault(), this.handleFullScreen_()
			}, hR.prototype.handleFullScreen_ = function() {
				var t, e;
				!rR() || (e = this.getMap()) && (oR() ? document.exitFullscreen ? document
					.exitFullscreen() : document.msExitFullscreen ? document.msExitFullscreen() :
					document.mozCancelFullScreen ? document.mozCancelFullScreen() : document
					.webkitExitFullscreen && document.webkitExitFullscreen() : (t = this.source_ ?
						"string" == typeof this.source_ ? document.getElementById(this.source_) :
						this.source_ : e.getTargetElement(), this.keys_ ? (e = t)
						.mozRequestFullScreenWithKeys ? e.mozRequestFullScreenWithKeys() : e
						.webkitRequestFullscreen ? e.webkitRequestFullscreen() : nR(e) : nR(t)))
			}, hR.prototype.handleFullScreenChange_ = function() {
				var t = this.getMap();
				oR() ? (this.setClassName_(this.button_, !0), _s(this.labelActiveNode_, this
					.labelNode_)) : (this.setClassName_(this.button_, !1), _s(this.labelNode_, this
					.labelActiveNode_)), t && t.updateSize()
			}, hR.prototype.setClassName_ = function(t, e) {
				var i = this.cssClassName_ + "-true",
					r = this.cssClassName_ + "-false",
					e = e ? i : r;
				t.classList.remove(i), t.classList.remove(r), t.classList.add(e)
			}, hR.prototype.setMap = function(t) {
				sR.prototype.setMap.call(this, t), t && this.listenerKeys.push(E(document, iR(), this
					.handleFullScreenChange_, this))
			}, hR),
			aR = "projection";

		function hR(t) {
			var e = t || {};
			sR.call(this, {
				element: document.createElement("div"),
				target: e.target
			}), this.cssClassName_ = void 0 !== e.className ? e.className : "ol-full-screen";
			var i = void 0 !== e.label ? e.label : "⤢";
			this.labelNode_ = "string" == typeof i ? document.createTextNode(i) : i;
			t = void 0 !== e.labelActive ? e.labelActive : "×";
			this.labelActiveNode_ = "string" == typeof t ? document.createTextNode(t) : t, this.button_ =
				document.createElement("button");
			i = e.tipLabel || "Toggle full-screen";
			this.setClassName_(this.button_, oR()), this.button_.setAttribute("type", "button"), this
				.button_.title = i, this.button_.appendChild(this.labelNode_), E(this.button_, A.CLICK, this
					.handleClick_, this);
			t = this.cssClassName_ + " " + Ws + " " + Ks + " " + (rR() ? "" : "ol-unsupported"), i = this
				.element;
			i.className = t, i.appendChild(this.button_), this.keys_ = void 0 !== e.keys && e.keys, this
				.source_ = e.source
		}

		function lR(t) {
			t = t.frameState;
			t ? this.mapProjection_ != t.viewState.projection && (this.mapProjection_ = t.viewState
				.projection, this.transform_ = null) : this.mapProjection_ = null
		}
		var uR, jo = ((uR = Xs) && (pR.__proto__ = uR), ((pR.prototype = Object.create(uR && uR.prototype))
			.constructor = pR).prototype.handleProjectionChanged_ = function() {
			this.transform_ = null
		}, pR.prototype.getCoordinateFormat = function() {
			return this.get("coordinateFormat")
		}, pR.prototype.getProjection = function() {
			return this.get(aR)
		}, pR.prototype.handleMouseMove = function(t) {
			var e = this.getMap();
			this.lastMouseMovePixel_ = e.getEventPixel(t), this.updateHTML_(this
				.lastMouseMovePixel_)
		}, pR.prototype.handleMouseOut = function(t) {
			this.updateHTML_(null), this.lastMouseMovePixel_ = null
		}, pR.prototype.setMap = function(t) {
			uR.prototype.setMap.call(this, t), t && (t = t.getViewport(), this.listenerKeys.push(E(
				t, A.MOUSEMOVE, this.handleMouseMove, this), E(t, A.TOUCHSTART, this
				.handleMouseMove, this)), this.renderOnMouseOut_ && this.listenerKeys.push(
				E(t, A.MOUSEOUT, this.handleMouseOut, this), E(t, A.TOUCHEND, this
					.handleMouseOut, this)))
		}, pR.prototype.setCoordinateFormat = function(t) {
			this.set("coordinateFormat", t)
		}, pR.prototype.setProjection = function(t) {
			this.set(aR, ke(t))
		}, pR.prototype.updateHTML_ = function(t) {
			var e, i = this.undefinedHTML_;
			t && this.mapProjection_ && (this.transform_ || (e = this.getProjection(), this
					.transform_ = e ? Ve(this.mapProjection_, e) : Ge), (e = this.getMap()
					.getCoordinateFromPixel(t)) && (this.transform_(e, e), i = (t = this
					.getCoordinateFormat()) ? t(e) : e.toString())), this.renderedHTML_ && i ===
				this.renderedHTML_ || (this.element.innerHTML = i, this.renderedHTML_ = i)
		}, pR);

		function pR(t) {
			var e = t || {},
				t = document.createElement("div");
			t.className = void 0 !== e.className ? e.className : "ol-mouse-position", uR.call(this, {
					element: t,
					render: e.render || lR,
					target: e.target
				}), E(this, z(aR), this.handleProjectionChanged_, this), e.coordinateFormat && this
				.setCoordinateFormat(e.coordinateFormat), e.projection && this.setProjection(e.projection),
				this.undefinedHTML_ = void 0 !== e.undefinedHTML ? e.undefinedHTML : "&#160;", this
				.renderOnMouseOut_ = !!this.undefinedHTML_, this.renderedHTML_ = t.innerHTML, this
				.mapProjection_ = null, this.transform_ = null, this.lastMouseMovePixel_ = null
		}

		function cR(t) {
			this.validateExtent_(), this.updateBox_()
		}
		var dR, $s = ((dR = Xs) && (ER.__proto__ = dR), ((ER.prototype = Object.create(dR && dR.prototype))
				.constructor = ER).prototype.setMap = function(t) {
				var e = this.getMap();
				t !== e && (e && ((e = e.getView()) && this.unbindView_(e), this.ovmap_.setTarget(
					null)), dR.prototype.setMap.call(this, t), t && (this.ovmap_.setTarget(this
							.ovmapDiv_), this.listenerKeys.push(E(t, l, this
							.handleMapPropertyChange_, this)), 0 === this.ovmap_.getLayers()
						.getLength() && this.ovmap_.setLayerGroup(t.getLayerGroup()), (t = t
							.getView()) && (this.bindView_(t), t.isDef() && (this.ovmap_
						.updateSize(), this.resetExtent_()))))
			}, ER.prototype.handleMapPropertyChange_ = function(t) {
				t.key === Yn && ((t = t.oldValue) && this.unbindView_(t), t = this.getMap().getView(),
					this.bindView_(t))
			}, ER.prototype.bindView_ = function(t) {
				E(t, z(os), this.handleRotationChanged_, this)
			}, ER.prototype.unbindView_ = function(t) {
				x(t, z(os), this.handleRotationChanged_, this)
			}, ER.prototype.handleRotationChanged_ = function() {
				this.ovmap_.getView().setRotation(this.getMap().getView().getRotation())
			}, ER.prototype.validateExtent_ = function() {
				var t, e, i, r, o = this.getMap(),
					n = this.ovmap_;
				o.isRendered() && n.isRendered() && (i = o.getSize(), t = o.getView().calculateExtent(
					i), r = n.getSize(), e = n.getView().calculateExtent(r), o = n
					.getPixelFromCoordinate(Ut(t)), i = n.getPixelFromCoordinate(Nt(t)), n = Math
					.abs(o[0] - i[0]), o = Math.abs(o[1] - i[1]), i = r[0], r = r[1], n < .1 * i ||
					o < .1 * r || .75 * i < n || .75 * r < o ? this.resetExtent_() : xt(e, t) ||
					this.recenter_())
			}, ER.prototype.resetExtent_ = function() {
				var t = this.getMap(),
					e = this.ovmap_,
					i = t.getSize(),
					t = t.getView().calculateExtent(i),
					i = e.getView(),
					e = Math.log(7.5) / Math.LN2;
				Vt(t, 1 / (.1 * Math.pow(2, e / 2))), i.fit(t)
			}, ER.prototype.recenter_ = function() {
				var t = this.getMap(),
					e = this.ovmap_,
					t = t.getView();
				e.getView().setCenter(t.getCenter())
			}, ER.prototype.updateBox_ = function() {
				var t, e, i, r, o = this.getMap(),
					n = this.ovmap_;
				o.isRendered() && n.isRendered() && (t = o.getSize(), i = o.getView(), e = n.getView(),
					r = i.getRotation(), o = this.boxOverlay_, n = this.boxOverlay_.getElement(),
					i = i.calculateExtent(t), t = e.getResolution(), e = At(i), i = Yt(i), r = this
					.calculateCoordinateRotate_(r, e), o.setPosition(r), n && (n.style.width = Math
						.abs((e[0] - i[0]) / t) + "px", n.style.height = Math.abs((i[1] - e[1]) /
						t) + "px"))
			}, ER.prototype.calculateCoordinateRotate_ = function(t, e) {
				var i, r = this.getMap().getView().getCenter();
				return r && (Nr(i = [e[0] - r[0], e[1] - r[1]], t), Pr(i, r)), i
			}, ER.prototype.handleClick_ = function(t) {
				t.preventDefault(), this.handleToggle_()
			}, ER.prototype.handleToggle_ = function() {
				this.element.classList.toggle(Hs), this.collapsed_ ? _s(this.collapseLabel_, this
						.label_) : _s(this.label_, this.collapseLabel_), this.collapsed_ = !this
					.collapsed_;
				var t = this.ovmap_;
				this.collapsed_ || t.isRendered() || (t.updateSize(), this.resetExtent_(), v(t, Dn,
					function(t) {
						this.updateBox_()
					}, this))
			}, ER.prototype.getCollapsible = function() {
				return this.collapsible_
			}, ER.prototype.setCollapsible = function(t) {
				this.collapsible_ !== t && (this.collapsible_ = t, this.element.classList.toggle(
					"ol-uncollapsible"), !t && this.collapsed_ && this.handleToggle_())
			}, ER.prototype.setCollapsed = function(t) {
				this.collapsible_ && this.collapsed_ !== t && this.handleToggle_()
			}, ER.prototype.getCollapsed = function() {
				return this.collapsed_
			}, ER.prototype.getOverviewMap = function() {
				return this.ovmap_
			}, ER),
			_R = "units",
			fR = "degrees",
			gR = "imperial",
			yR = "nautical",
			mR = "metric",
			vR = "us",
			xR = [1, 2, 5];

		function ER(t) {
			var e = t || {};
			dR.call(this, {
					element: document.createElement("div"),
					render: e.render || cR,
					target: e.target
				}), this.collapsed_ = void 0 === e.collapsed || e.collapsed, this.collapsible_ = void 0 ===
				e.collapsible || e.collapsible, this.collapsible_ || (this.collapsed_ = !1);
			var i = void 0 !== e.className ? e.className : "ol-overviewmap",
				r = void 0 !== e.tipLabel ? e.tipLabel : "Overview map",
				o = void 0 !== e.collapseLabel ? e.collapseLabel : "«";
			"string" == typeof o ? (this.collapseLabel_ = document.createElement("span"), this
				.collapseLabel_.textContent = o) : this.collapseLabel_ = o;
			t = void 0 !== e.label ? e.label : "»";
			"string" == typeof t ? (this.label_ = document.createElement("span"), this.label_.textContent =
				t) : this.label_ = t;
			o = this.collapsible_ && !this.collapsed_ ? this.collapseLabel_ : this.label_, t = document
				.createElement("button");
			t.setAttribute("type", "button"), t.title = r, t.appendChild(o), E(t, A.CLICK, this
					.handleClick_, this), this.ovmapDiv_ = document.createElement("div"), this.ovmapDiv_
				.className = "ol-overviewmap-map", this.ovmap_ = new op({
					controls: new Z,
					interactions: new Z,
					view: e.view
				});
			var n = this.ovmap_;
			e.layers && e.layers.forEach(function(t) {
				n.addLayer(t)
			}.bind(this));
			e = document.createElement("div");
			e.className = "ol-overviewmap-box", e.style.boxSizing = "border-box", this.boxOverlay_ =
		new vp({
				position: [0, 0],
				positioning: np,
				element: e
			}), this.ovmap_.addOverlay(this.boxOverlay_);
			e = i + " " + Ws + " " + Ks + (this.collapsed_ && this.collapsible_ ? " " + Hs : "") + (this
				.collapsible_ ? "" : " ol-uncollapsible"), i = this.element;
			i.className = e, i.appendChild(this.ovmapDiv_), i.appendChild(t);
			var s = this,
				a = this.boxOverlay_,
				h = this.boxOverlay_.getElement(),
				l = function(t) {
					t = {
						clientX: t.clientX - h.offsetWidth / 2,
						clientY: t.clientY + h.offsetHeight / 2
					}, t = n.getEventCoordinate(t);
					a.setPosition(t)
				},
				u = function(t) {
					t = n.getEventCoordinate(t);
					s.getMap().getView().setCenter(t), window.removeEventListener("mousemove", l), window
						.removeEventListener("mouseup", u)
				};
			h.addEventListener("mousedown", function() {
				window.addEventListener("mousemove", l), window.addEventListener("mouseup", u)
			})
		}

		function SR(t) {
			t = t.frameState;
			this.viewState_ = t ? t.viewState : null, this.updateElement_()
		}
		var CR, Gd = ((CR = Xs) && (RR.__proto__ = CR), ((RR.prototype = Object.create(CR && CR.prototype))
				.constructor = RR).prototype.getUnits = function() {
				return this.get(_R)
			}, RR.prototype.handleUnitsChanged_ = function() {
				this.updateElement_()
			}, RR.prototype.setUnits = function(t) {
				this.set(_R, t)
			}, RR.prototype.updateElement_ = function() {
				var t = this.viewState_;
				if (t) {
					var e = t.center,
						i = t.projection,
						r = this.getUnits(),
						o = r == fR ? pe.DEGREES : pe.METERS,
						n = je(i, t.resolution, e, o);
					i.getUnits() != pe.DEGREES && i.getMetersPerUnit() && o == pe.METERS && (n *= i
						.getMetersPerUnit());
					t = this.minWidth_ * n, e = "";
					r == fR ? (o = ue[pe.DEGREES], i.getUnits() == pe.DEGREES ? t *= o : n /= o, t < o /
							60 ? (e = "″", n *= 3600) : t < o ? (e = "′", n *= 60) : e = "°") : r ==
						gR ? t < .9144 ? (e = "in", n /= .0254) : t < 1609.344 ? (e = "ft", n /=
						.3048) : (e = "mi", n /= 1609.344) : r == yR ? (n /= 1852, e = "nm") : r == mR ?
						t < .001 ? (e = "μm", n *= 1e6) : t < 1 ? (e = "mm", n *= 1e3) : t < 1e3 ? e =
						"m" : (e = "km", n /= 1e3) : r == vR ? t < .9144 ? (e = "in", n *= 39.37) : t <
						1609.344 ? (e = "ft", n /= .30480061) : (e = "mi", n /= 1609.3472) : $(!1, 33);
					for (var s, a, h = 3 * Math.floor(Math.log(this.minWidth_ * n) / Math.log(10));;) {
						if (s = xR[(h % 3 + 3) % 3] * Math.pow(10, Math.floor(h / 3)), a = Math.round(
								s / n), isNaN(a)) return this.element.style.display = "none", void(this
							.renderedVisible_ = !1);
						if (a >= this.minWidth_) break;
						++h
					}
					e = s + " " + e;
					this.renderedHTML_ != e && (this.innerElement_.innerHTML = e, this.renderedHTML_ =
						e), this.renderedWidth_ != a && (this.innerElement_.style.width = a + "px",
						this.renderedWidth_ = a), this.renderedVisible_ || (this.element.style
						.display = "", this.renderedVisible_ = !0)
				} else this.renderedVisible_ && (this.element.style.display = "none", this
					.renderedVisible_ = !1)
			}, RR),
			wR = 0,
			TR = 1;

		function RR(t) {
			var e = t || {},
				t = void 0 !== e.className ? e.className : "ol-scale-line";
			CR.call(this, {
					element: document.createElement("div"),
					render: e.render || SR,
					target: e.target
				}), this.innerElement_ = document.createElement("div"), this.innerElement_.className = t +
				"-inner", this.element.className = t + " " + Ws, this.element.appendChild(this
					.innerElement_), this.viewState_ = null, this.minWidth_ = void 0 !== e.minWidth ? e
				.minWidth : 64, this.renderedVisible_ = !1, this.renderedWidth_ = void 0, this
				.renderedHTML_ = "", E(this, z(_R), this.handleUnitsChanged_, this), this.setUnits(e
					.units || mR)
		}

		function IR(t) {
			t.frameState && (this.sliderInitialized_ || this.initSlider_(), (t = t.frameState.viewState
				.resolution) !== this.currentResolution_ && (this.currentResolution_ = t, this
				.setThumbPosition_(t)))
		}
		var LR, bR, Uh = ((bR = Xs) && (MR.__proto__ = bR), ((MR.prototype = Object.create(bR && bR
				.prototype)).constructor = MR).prototype.disposeInternal = function() {
				this.dragger_.dispose(), bR.prototype.disposeInternal.call(this)
			}, MR.prototype.setMap = function(t) {
				bR.prototype.setMap.call(this, t), t && t.render()
			}, MR.prototype.initSlider_ = function() {
				var t = this.element,
					e = t.offsetWidth,
					i = t.offsetHeight,
					r = t.firstElementChild,
					o = getComputedStyle(r),
					t = r.offsetWidth + parseFloat(o.marginRight) + parseFloat(o.marginLeft),
					o = r.offsetHeight + parseFloat(o.marginTop) + parseFloat(o.marginBottom);
				this.thumbSize_ = [t, o], i < e ? (this.direction_ = TR, this.widthLimit_ = e - t) : (
					this.direction_ = wR, this.heightLimit_ = i - o), this.sliderInitialized_ = !0
			}, MR.prototype.handleContainerClick_ = function(t) {
				var e = this.getMap().getView(),
					t = this.getRelativePosition_(t.offsetX - this.thumbSize_[0] / 2, t.offsetY - this
						.thumbSize_[1] / 2),
					t = this.getResolutionForPosition_(t);
				e.animate({
					resolution: e.constrainResolution(t),
					duration: this.duration_,
					easing: ss
				})
			}, MR.prototype.handleDraggerStart_ = function(t) {
				var e;
				this.dragging_ || t.originalEvent.target !== this.element.firstElementChild || (this
					.getMap().getView().setHint(1, 1), this.previousX_ = t.clientX, this
					.previousY_ = t.clientY, this.dragging_ = !0, 0 !== this.dragListenerKeys_
					.length) || (e = this.handleDraggerDrag_, t = this.handleDraggerEnd_, this
					.dragListenerKeys_.push(E(document, A.MOUSEMOVE, e, this), E(document, Io, e,
						this), E(document, A.MOUSEUP, t, this), E(document, bo, t, this)))
			}, MR.prototype.handleDraggerDrag_ = function(t) {
				var e, i;
				this.dragging_ && (i = this.element.firstElementChild, e = t.clientX - this.previousX_ +
					parseFloat(i.style.left), i = t.clientY - this.previousY_ + parseFloat(i.style
						.top), i = this.getRelativePosition_(e, i), this.currentResolution_ = this
					.getResolutionForPosition_(i), this.getMap().getView().setResolution(this
						.currentResolution_), this.setThumbPosition_(this.currentResolution_), this
					.previousX_ = t.clientX, this.previousY_ = t.clientY)
			}, MR.prototype.handleDraggerEnd_ = function(t) {
				var e;
				this.dragging_ && ((e = this.getMap().getView()).setHint(1, -1), e.animate({
						resolution: e.constrainResolution(this.currentResolution_),
						duration: this.duration_,
						easing: ss
					}), this.dragging_ = !1, this.previousX_ = void 0, this.previousY_ = void 0,
					this.dragListenerKeys_.forEach(S), this.dragListenerKeys_.length = 0)
			}, MR.prototype.setThumbPosition_ = function(t) {
				var e = this.getPositionForResolution_(t),
					t = this.element.firstElementChild;
				this.direction_ == TR ? t.style.left = this.widthLimit_ * e + "px" : t.style.top = this
					.heightLimit_ * e + "px"
			}, MR.prototype.getRelativePosition_ = function(t, e) {
				return Jt(this.direction_ === TR ? t / this.widthLimit_ : e / this.heightLimit_, 0, 1)
			}, MR.prototype.getResolutionForPosition_ = function(t) {
				return this.getMap().getView().getResolutionForValueFunction()(1 - t)
			}, MR.prototype.getPositionForResolution_ = function(t) {
				return 1 - this.getMap().getView().getValueForResolutionFunction()(t)
			}, MR),
			Mc = ((LR = Xs) && (PR.__proto__ = LR), ((PR.prototype = Object.create(LR && LR.prototype))
				.constructor = PR).prototype.handleClick_ = function(t) {
				t.preventDefault(), this.handleZoomToExtent()
			}, PR.prototype.handleZoomToExtent = function() {
				var t = this.getMap().getView(),
					e = this.extent || t.getProjection().getExtent();
				t.fit(e)
			}, PR),
			e = {
				array: {},
				color: {},
				colorlike: {},
				control: {},
				coordinate: {},
				easing: {},
				events: {}
			};

		function PR(t) {
			var e = t || {};
			LR.call(this, {
				element: document.createElement("div"),
				target: e.target
			}), this.extent = e.extent || null;
			var i = void 0 !== e.className ? e.className : "ol-zoom-extent",
				r = void 0 !== e.label ? e.label : "E",
				t = void 0 !== e.tipLabel ? e.tipLabel : "Fit to extent",
				e = document.createElement("button");
			e.setAttribute("type", "button"), e.title = t, e.appendChild("string" == typeof r ? document
				.createTextNode(r) : r), E(e, A.CLICK, this.handleClick_, this);
			r = i + " " + Ws + " " + Ks, i = this.element;
			i.className = r, i.appendChild(e)
		}

		function MR(t) {
			var e = t || {};
			bR.call(this, {
					element: document.createElement("div"),
					render: e.render || IR
				}), this.dragListenerKeys_ = [], this.currentResolution_ = void 0, this.direction_ = wR,
				this.dragging_, this.heightLimit_ = 0, this.widthLimit_ = 0, this.previousX_, this
				.previousY_, this.thumbSize_ = null, this.sliderInitialized_ = !1, this.duration_ =
				void 0 !== e.duration ? e.duration : 200;
			var i = void 0 !== e.className ? e.className : "ol-zoomslider",
				t = document.createElement("button");
			t.setAttribute("type", "button"), t.className = i + "-thumb " + Ws;
			e = this.element;
			e.className = i + " " + Ws + " " + Ks, e.appendChild(t), this.dragger_ = new Nn(e), E(this
				.dragger_, Lo, this.handleDraggerStart_, this), E(this.dragger_, Io, this
				.handleDraggerDrag_, this), E(this.dragger_, bo, this.handleDraggerEnd_, this), E(e, A
				.CLICK, this.handleContainerClick_, this), E(t, A.CLICK, P)
		}
		e.events.condition = {}, e.extent = {}, e.featureloader = {}, e.format = {}, e.format.filter = {}, e
			.geom = {}, e.has = {}, e.interaction = {}, e.layer = {}, e.loadingstrategy = {}, e.proj = {}, e
			.proj.Units = {}, e.proj.proj4 = {}, e.render = {}, e.render.canvas = {}, e.renderer = {}, e
			.renderer.canvas = {}, e.renderer.webgl = {}, e.size = {}, e.source = {}, e.sphere = {}, e
			.style = {}, e.style.IconImageCache = {}, e.tilegrid = {}, e.xml = {}, e.Collection = Z, e
			.Feature = et, e.Geolocation = Tr, e.Graticule = yo, e.Kinetic = So, e.Map = op, e.Object = K, e
			.Observable = k, e.Observable.unByKey = function(t) {
				if (Array.isArray(t))
					for (var e = 0, i = t.length; e < i; ++e) S(t[e]);
				else S(t)
			}, e.Overlay = vp, e.PluggableMap = js, e.View = ps, e.WebGLMap = Qd, e.array.stableSort = ht, e
			.color.asArray = oo, e.color.asString = to, e.colorlike.asColorLike = gl, e.control
			.Attribution = ra, e.control.Attribution.render = ea, e.control.Control = Xs, e.control
			.FullScreen = ru, e.control.MousePosition = jo, e.control.MousePosition.render = lR, e.control
			.OverviewMap = $s, e.control.OverviewMap.render = cR, e.control.Rotate = ha, e.control.Rotate
			.render = na, e.control.ScaleLine = Gd, e.control.ScaleLine.render = SR, e.control.Zoom = la, e
			.control.ZoomSlider = Uh, e.control.ZoomSlider.render = IR, e.control.ZoomToExtent = Mc, e
			.control.defaults = ca, e.coordinate.add = Pr, e.coordinate.createStringXY = function(e) {
				return function(t) {
					return Ur(t, e)
				}
			}, e.coordinate.format = Or, e.coordinate.rotate = Nr, e.coordinate.toStringHDMS = function(t,
				e) {
				return t ? Fr("NS", t[1], e) + " " + Fr("EW", t[0], e) : ""
			}, e.coordinate.toStringXY = Ur, e.easing.easeIn = ns, e.easing.easeOut = ss, e.easing
			.inAndOut = as, e.easing.linear = hs, e.easing.upAndDown = function(t) {
				return t < .5 ? as(2 * t) : 1 - as(2 * (t - .5))
			}, e.events.condition.altKeyOnly = Ta, e.events.condition.altShiftKeysOnly = Ra, e.events
			.condition.always = La, e.events.condition.click = function(t) {
				return t.type == To.CLICK
			}, e.events.condition.doubleClick = function(t) {
				return t.type == To.DBLCLICK
			}, e.events.condition.focus = Ia, e.events.condition.mouseOnly = Ga, e.events.condition.never =
			Pa, e.events.condition.noModifierKeys = Oa, e.events.condition.platformModifierKeyOnly =
			function(t) {
				t = t.originalEvent;
				return !t.altKey && (ar ? t.metaKey : t.ctrlKey) && !t.shiftKey
			}, e.events.condition.pointerMove = Ma, e.events.condition.primaryAction = Da, e.events
			.condition.shiftKeyOnly = Aa, e.events.condition.singleClick = Fa, e.events.condition
			.targetNotEditable = Na, e.extent.applyTransform = Wt, e.extent.boundingExtent = ft, e.extent
			.buffer = gt, e.extent.containsCoordinate = vt, e.extent.containsExtent = xt, e.extent
			.containsXY = Et, e.extent.createEmpty = Ct, e.extent.equals = Lt, e.extent.extend = bt, e
			.extent.getArea = Ot, e.extent.getBottomLeft = At, e.extent.getBottomRight = Nt, e.extent
			.getCenter = Gt, e.extent.getHeight = kt, e.extent.getIntersection = jt, e.extent.getSize =
			function(t) {
				return [t[2] - t[0], t[3] - t[1]]
			}, e.extent.getTopLeft = Ut, e.extent.getTopRight = Yt, e.extent.getWidth = Bt, e.extent
			.intersects = zt, e.extent.isEmpty = Xt, e.featureloader.xhr = i_, e.format.EsriJSON = Bc, e
			.format.Feature = cc, e.format.GML = Td, e.format.GML2 = Gv, e.format.GML3 = Mv, e.format
			.GML32 = Op, e.format.GPX = O, e.format.GeoJSON = pf, e.format.IGC = Sn, e.format.KML = ad, e
			.format.MVT = vu, e.format.OSMXML = Jp, e.format.Polyline = Gl, e.format.Polyline.decodeDeltas =
			ZS, e.format.Polyline.decodeFloats = JS, e.format.Polyline.encodeDeltas = HS, e.format.Polyline
			.encodeFloats = qS, e.format.TopoJSON = Ol, e.format.WFS = Dl, e.format.WFS.writeFilter =
			function(t) {
				var e = s_(Ew, "Filter");
				return Pw(e, t, []), e
			}, e.format.WKT = T, e.format.WMSCapabilities = gf, e.format.WMSGetFeatureInfo = qc, e.format
			.WMTSCapabilities = Fp, e.format.filter.Bbox = LC, e.format.filter.Contains = bC, e.format
			.filter.During = PC, e.format.filter.EqualTo = MC, e.format.filter.GreaterThan = FC, e.format
			.filter.GreaterThanOrEqualTo = OC, e.format.filter.Intersects = AC, e.format.filter.IsBetween =
			NC, e.format.filter.IsLike = GC, e.format.filter.IsNull = DC, e.format.filter.LessThan = kC, e
			.format.filter.LessThanOrEqualTo = jC, e.format.filter.Not = UC, e.format.filter.NotEqualTo =
			YC, e.format.filter.Or = BC, e.format.filter.Within = zC, e.format.filter.and = pw, e.format
			.filter.bbox = cw, e.format.filter.between = function(t, e, i) {
				return new NC(t, e, i)
			}, e.format.filter.contains = function(t, e, i) {
				return new bC(t, e, i)
			}, e.format.filter.during = function(t, e, i) {
				return new PC(t, e, i)
			}, e.format.filter.equalTo = function(t, e, i) {
				return new MC(t, e, i)
			}, e.format.filter.greaterThan = function(t, e) {
				return new FC(t, e)
			}, e.format.filter.greaterThanOrEqualTo = function(t, e) {
				return new OC(t, e)
			}, e.format.filter.intersects = function(t, e, i) {
				return new AC(t, e, i)
			}, e.format.filter.isNull = function(t) {
				return new DC(t)
			}, e.format.filter.lessThan = function(t, e) {
				return new kC(t, e)
			}, e.format.filter.lessThanOrEqualTo = function(t, e) {
				return new jC(t, e)
			}, e.format.filter.like = function(t, e, i, r, o, n) {
				return new GC(t, e, i, r, o, n)
			}, e.format.filter.not = function(t) {
				return new UC(t)
			}, e.format.filter.notEqualTo = function(t, e, i) {
				return new YC(t, e, i)
			}, e.format.filter.or = function(t) {
				var e = [null].concat(Array.prototype.slice.call(arguments));
				return new(Function.prototype.bind.apply(BC, e))
			}, e.format.filter.within = function(t, e, i) {
				return new zC(t, e, i)
			}, e.geom.Circle = Zy, e.geom.Geometry = hi, e.geom.GeometryCollection = Zm, e.geom.LineString =
			Vr, e.geom.LinearRing = Fi, e.geom.MultiLineString = qy, e.geom.MultiPoint = Jy, e.geom
			.MultiPolygon = rm, e.geom.Point = Oi, e.geom.Polygon = Zi, e.geom.Polygon.circular = Ji, e.geom
			.Polygon.fromCircle = $i, e.geom.Polygon.fromExtent = Qi, e.geom.SimpleGeometry = ci, e.getUid =
			ct, e.has.DEVICE_PIXEL_RATIO = hr, e.has.GEOLOCATION = ur, e.has.TOUCH = pr, e.inherits =
			function(t, e) {
				t.prototype = Object.create(e.prototype), t.prototype.constructor = t
			}, e.interaction.DoubleClickZoom = wa, e.interaction.DragAndDrop = Mp, e.interaction.DragBox =
			Ja, e.interaction.DragPan = Ka, e.interaction.DragRotate = Ha, e.interaction.DragRotateAndZoom =
			Kp, e.interaction.DragZoom = sh, e.interaction.Draw = Tc, e.interaction.Draw.createBox =
			function() {
				return function(t, e) {
					t = ft(t), t = [
						[At(t), Nt(t), Yt(t), Ut(t), At(t)]
					];
					return e ? e.setCoordinates(t) : e = new Zi(t), e
				}
			}, e.interaction.Draw.createRegularPolygon = function(s, a) {
				return function(t, e) {
					var i = t[0],
						r = t[1],
						o = Math.sqrt(Dr(i, r)),
						n = e || $i(new Zy(i), s),
						t = a;
					return a || (e = r[0] - i[0], r = r[1] - i[1], t = Math.atan(r / e) - (e < 0 ? Math
						.PI : 0)), tr(n, i, o, t), n
				}
			}, e.interaction.Extent = Lc, e.interaction.Interaction = xa, e.interaction.KeyboardPan = ph, e
			.interaction.KeyboardZoom = mh, e.interaction.Modify = Yp, e.interaction.MouseWheelZoom = xh, e
			.interaction.PinchRotate = Eh, e.interaction.PinchZoom = Sh, e.interaction.Pointer = Wa, e
			.interaction.Select = Fc, e.interaction.Snap = Nc, e.interaction.Translate = pc, e.interaction
			.defaults = Ih, e.layer.Base = Rs, e.layer.Group = Fs, e.layer.Heatmap = Pu, e.layer.Image = Eg,
			e.layer.Tile = Rg, e.layer.Vector = by, e.layer.VectorTile = Lp, e.loadingstrategy.all = r_, e
			.loadingstrategy.bbox = function(t, e) {
				return [t]
			}, e.loadingstrategy.tile = function(n) {
				return function(t, e) {
					var e = n.getZForResolution(e),
						i = n.getTileRangeForExtentAndZ(t, e),
						r = [],
						o = [e, 0, 0];
					for (o[1] = i.minX; o[1] <= i.maxX; ++o[1])
						for (o[2] = i.minY; o[2] <= i.maxY; ++o[2]) r.push(n.getTileCoordExtent(o));
					return r
				}
			}, e.proj.Projection = _e, e.proj.Units.METERS_PER_UNIT = ue, e.proj.addCoordinateTransforms =
			ze, e.proj.addEquivalentProjections = Ue, e.proj.addProjection = De, e.proj.equivalent = Xe, e
			.proj.fromLonLat = function(t, e) {
				return Ke(t, "EPSG:4326", void 0 !== e ? e : "EPSG:3857")
			}, e.proj.get = ke, e.proj.getPointResolution = je, e.proj.getTransform = We, e.proj.proj4
			.register = function(t) {
				for (var e = Object.keys(t.defs), i = e.length, r = 0; r < i; ++r) {
					var o, n = e[r];
					ke(n) || (o = t.defs(n), De(new _e({
						code: n,
						axisOrientation: o.axis,
						metersPerUnit: o.to_meter,
						units: o.units
					})))
				}
				for (r = 0; r < i; ++r)
					for (var s = e[r], a = ke(s), h = 0; h < i; ++h) {
						var l = e[h],
							u = ke(l);
						Ae(s, l) || (t.defs[s] === t.defs[l] ? Ue([a, u]) : ze(a, u, (l = t(s, l)).forward,
							l.inverse))
					}
			}, e.proj.toLonLat = function(t, e) {
				t = Ke(t, void 0 !== e ? e : "EPSG:3857", "EPSG:4326"), e = t[0];
				return (e < -180 || 180 < e) && (t[0] = re(e + 180, 360) - 180), t
			}, e.proj.transform = Ke, e.proj.transformExtent = He, e.render.VectorContext = vl, e.render
			.canvas.labelCache = Qh, e.render.toContext = function(t, e) {
				var i = t.canvas,
					r = e || {},
					e = r.pixelRatio || hr,
					r = r.size;
				r && (i.width = r[0] * e, i.height = r[1] * e, i.style.width = r[0] + "px", i.style.height =
					r[1] + "px");
				r = [0, 0, i.width, i.height], i = ii([1, 0, 0, 1, 0, 0], e, e);
				return new xl(t, e, r, i, 0)
			}, e.renderer.canvas.ImageLayer = Wl, e.renderer.canvas.Map = Nl, e.renderer.canvas.TileLayer =
			$l, e.renderer.canvas.VectorLayer = Vu, e.renderer.canvas.VectorTileLayer = rp, e.renderer.webgl
			.ImageLayer = nd, e.renderer.webgl.Map = sd, e.renderer.webgl.TileLayer = Kd, e.renderer.webgl
			.VectorLayer = Jd, e.size.toSize = Ds, e.source.BingMaps = b, e.source.CartoDB = ce, e.source
			.Cluster = ve, e.source.Image = Te, e.source.ImageArcGISRest = xe, e.source.ImageCanvas = Re, e
			.source.ImageMapGuide = rr, e.source.ImageStatic = go, e.source.ImageWMS = mo, e.source.OSM =
			No, e.source.OSM.ATTRIBUTION = dg, e.source.Raster = zn, e.source.Source = Cd, e.source.Stamen =
			yl, e.source.Tile = kd, e.source.TileArcGISRest = El, e.source.TileDebug = kl, e.source
			.TileImage = w, e.source.TileJSON = tu, e.source.TileWMS = iu, e.source.UTFGrid = lu, e.source
			.Vector = Af, e.source.VectorTile = xu, e.source.WMTS = Eu, e.source.WMTS
			.optionsFromCapabilities = function(t, s) {
				var e = at(t.Contents.Layer, function(t, e, i) {
					return t.Identifier == s.layer
				});
				if (null === e) return null;
				var a = t.Contents.TileMatrixSet;
				(p = 1 < e.TileMatrixSetLink.length ? lt(e.TileMatrixSetLink, "projection" in s ? function(
					e, t, i) {
					var r = at(a, function(t) {
							return t.Identifier == e.TileMatrixSet
						}).SupportedCRS,
						o = ke(r.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/, "$1:$3")) || ke(r),
						n = ke(s.projection);
					return o && n ? Xe(o, n) : r == s.projection
				} : function(t, e, i) {
					return t.TileMatrixSet == s.matrixSet
				}) : 0) < 0 && (p = 0);
				var r = e.TileMatrixSetLink[p].TileMatrixSet,
					i = e.TileMatrixSetLink[p].TileMatrixSetLimits,
					o = e.Format[0];
				"format" in s && (o = s.format), (p = lt(e.Style, function(t, e, i) {
					return "style" in s ? t.Title == s.style : t.isDefault
				})) < 0 && (p = 0);
				var n = e.Style[p].Identifier,
					h = {};
				"Dimension" in e && e.Dimension.forEach(function(t, e, i) {
					var r = t.Identifier,
						o = t.Default;
					void 0 === o && (o = t.Value[0]), h[r] = o
				});
				var l, u = at(t.Contents.TileMatrixSet, function(t, e, i) {
						return t.Identifier == r
					}),
					p = u.SupportedCRS;
				p && (l = ke(p.replace(/urn:ogc:def:crs:(\w+):(.*:)?(\w+)$/, "$1:$3")) || ke(p)),
					"projection" in s && (_ = ke(s.projection)) && (l && !Xe(_, l) || (l = _));
				var c, d, _ = e.WGS84BoundingBox;
				void 0 !== _ && (d = ke("EPSG:4326").getExtent(), c = _[0] == d[0] && _[2] == d[2], d = He(
					_, "EPSG:4326", l), (_ = l.getExtent()) && (xt(_, d) || (d = void 0)));
				var i = b_(u, d, i),
					f = [],
					g = void 0 !== (g = s.requestEncoding) ? g : "";
				if ("OperationsMetadata" in t && "GetTile" in t.OperationsMetadata)
					for (var y = t.OperationsMetadata.GetTile.DCP.HTTP.Get, m = 0, v = y.length; m < v; ++m)
						if (y[m].Constraint) {
							var x = at(y[m].Constraint, function(t) {
								return "GetEncoding" == t.name
							}).AllowedValues.Value;
							if ("" === g && (g = x[0]), g !== cy.KVP) break;
							ot(x, cy.KVP) && f.push(y[m].href)
						} else y[m].href && (g = cy.KVP, f.push(y[m].href));
				return 0 === f.length && (g = cy.REST, e.ResourceURL.forEach(function(t) {
					"tile" === t.resourceType && (o = t.format, f.push(t.template))
				})), {
					urls: f,
					layer: s.layer,
					matrixSet: r,
					format: o,
					projection: l,
					requestEncoding: g,
					tileGrid: i,
					style: n,
					dimensions: h,
					wrapX: c,
					crossOrigin: s.crossOrigin
				}
			}, e.source.XYZ = le, e.source.Zoomify = Su, e.sphere.getArea = function d(t, e) {
				var i = e || {},
					r = i.radius || ne,
					i = i.projection || "EPSG:3857",
					o = t.getType();
				o !== Ht.GEOMETRY_COLLECTION && (t = t.clone().transform(i, "EPSG:4326"));
				var n, s, a, h, l = 0;
				switch (o) {
					case Ht.POINT:
					case Ht.MULTI_POINT:
					case Ht.LINE_STRING:
					case Ht.MULTI_LINE_STRING:
					case Ht.LINEAR_RING:
						break;
					case Ht.POLYGON:
						for (n = t.getCoordinates(), l = Math.abs(he(n[0], r)), p = 1, c = n.length; p <
							c; ++p) l -= Math.abs(he(n[p], r));
						break;
					case Ht.MULTI_POLYGON:
						for (p = 0, c = (n = t.getCoordinates()).length; p < c; ++p)
							for (s = n[p], l += Math.abs(he(s[0], r)), a = 1, h = s.length; a < h; ++a) l -=
								Math.abs(he(s[a], r));
						break;
					case Ht.GEOMETRY_COLLECTION:
						for (var u = t.getGeometries(), p = 0, c = u.length; p < c; ++p) l += d(u[p], e);
						break;
					default:
						throw new Error("Unsupported geometry type: " + o)
				}
				return l
			}, e.sphere.getDistance = se, e.sphere.getLength = function d(t, e) {
				var i = e || {},
					r = i.radius || ne,
					i = i.projection || "EPSG:3857",
					o = t.getType();
				o !== Ht.GEOMETRY_COLLECTION && (t = t.clone().transform(i, "EPSG:4326"));
				var n, s, a, h, l = 0;
				switch (o) {
					case Ht.POINT:
					case Ht.MULTI_POINT:
						break;
					case Ht.LINE_STRING:
					case Ht.LINEAR_RING:
						l = ae(n = t.getCoordinates(), r);
						break;
					case Ht.MULTI_LINE_STRING:
					case Ht.POLYGON:
						for (p = 0, c = (n = t.getCoordinates()).length; p < c; ++p) l += ae(n[p], r);
						break;
					case Ht.MULTI_POLYGON:
						for (p = 0, c = (n = t.getCoordinates()).length; p < c; ++p)
							for (a = 0, h = (s = n[p]).length; a < h; ++a) l += ae(s[a], r);
						break;
					case Ht.GEOMETRY_COLLECTION:
						for (var u = t.getGeometries(), p = 0, c = u.length; p < c; ++p) l += d(u[p], e);
						break;
					default:
						throw new Error("Unsupported geometry type: " + o)
				}
				return l
			}, e.style.AtlasManager = Yc, e.style.Circle = G_, e.style.Fill = ho, e.style.Icon = H_, e.style
			.IconImageCache.shared = wl, e.style.Image = A_, e.style.RegularShape = N_, e.style.Stroke = uo,
			e.style.Style = ef, e.style.Text = co, e.tilegrid.TileGrid = Id, e.tilegrid.WMTS = I_, e
			.tilegrid.WMTS.createFromCapabilitiesMatrixSet = b_, e.tilegrid.createXYZ = bd, e.xml
			.getAllTextContent = a_, e.xml.parse = l_, t["default"] = e
	}], o.c = r, o.d = function(t, e, i) {
		o.o(t, e) || Object.defineProperty(t, e, {
			enumerable: !0,
			get: i
		})
	}, o.r = function(t) {
		"undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(t, Symbol.toStringTag, {
			value: "Module"
		}), Object.defineProperty(t, "__esModule", {
			value: !0
		})
	}, o.t = function(e, t) {
		if (1 & t && (e = o(e)), 8 & t) return e;
		if (4 & t && "object" == typeof e && e && e.__esModule) return e;
		var i = Object.create(null);
		if (o.r(i), Object.defineProperty(i, "default", {
				enumerable: !0,
				value: e
			}), 2 & t && "string" != typeof e)
			for (var r in e) o.d(i, r, function(t) {
				return e[t]
			}.bind(null, r));
		return i
	}, o.n = function(t) {
		var e = t && t.__esModule ? function() {
			return t["default"]
		} : function() {
			return t
		};
		return o.d(e, "a", e), e
	}, o.o = function(t, e) {
		return Object.prototype.hasOwnProperty.call(t, e)
	}, o.p = "", o(o.s = 9)["default"];

	function o(t) {
		if (r[t]) return r[t].exports;
		var e = r[t] = {
			i: t,
			l: !1,
			exports: {}
		};
		return i[t].call(e.exports, e, e.exports, o), e.l = !0, e.exports
	}
	var i, r
});

